Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

소멸자 메서드 __del__()은 Python에서 어떻게 작동합니까?

<시간/> <본문>

__del__() 메서드는 소멸자 메서드로 알려져 있습니다. 개체에 대한 모든 참조가 삭제된 후에 발생하는 개체가 가비지 수집될 때 호출됩니다.

간단한 경우 이는 del x와 같은 변수를 삭제한 직후 또는 x가 로컬 변수인 경우 함수가 종료된 직후일 수 있습니다. 특히 순환 참조가 없는 한 표준 Python 구현인 CPython은 즉시 가비지 수집됩니다.

Python 가비지 수집의 유일한 속성은 모든 참조가 삭제된 후에 발생한다는 것이므로 이것이 반드시 바로 발생하지 않을 수도 있고 전혀 발생하지 않을 수도 있습니다.

더욱이 변수는 예를 들어 여러 가지 이유로 오랫동안 지속될 수 있습니다. 전파되는 예외 또는 모듈 내부 검사는 변수 참조 횟수를 0보다 크게 유지할 수 있습니다. 또한 변수는 순환 참조의 일부일 수 있습니다. 가비지 수집이 켜진 CPython은 이러한 주기를 대부분 중단하지만 전부는 아니지만 주기적으로 중단합니다.

__del__에 대한 유효한 사용 사례가 있습니다. 예를 들어 객체 X가 Y를 참조하고 Y 참조 사본을 전역 캐시에 보관하는 경우(cache['X -> Y'] =Y) X에 대해 예의입니다. __del__ 캐시 항목도 삭제합니다.

소멸자가 필요한 정리를 제공한다는 것을 알고 있다면 직접 x.__del__() 호출할 수 있습니다.