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

가비지 수집기가 모든 Python 개체를 추적할 수 있다고 생각하십니까?

<시간/> <본문>

Python은 쓰레기를 정리하기 위해 두 가지 기술을 사용합니다. 하나는 모든 개체에 영향을 미치지만 서로를 직접 또는 간접적으로 참조하는 개체를 정리할 수 없는 참조 카운팅입니다. 그것이 실제 가비지 수집기가 들어오는 곳입니다. 파이썬에는 알고 있는 객체에서 순환 참조를 검색하는 gc 모듈이 있습니다. 잠재적으로 참조 주기의 일부가 될 수 있는 개체만 순환 gc에 참여합니다. 예를 들어 목록은 수행하지만 문자열은 그렇지 않습니다. 문자열은 다른 개체를 참조하지 않습니다.

모든 Python 클래스와 해당 인스턴스는 순환 gc에 의해 자동으로 추적됩니다. C로 정의된 유형은 약간의 노력을 기울이지 않는 한 그렇지 않습니다. 주기의 일부가 될 수 있는 모든 내장 유형이 그렇습니다. 그러나 이것은 gc 모듈이 함께 재생되는 유형에 대해서만 알고 있음을 의미합니다.

수집 메커니즘 외에도 Python에는 자체 집계 메모리 할당자(obmalloc)가 있다는 사실도 있습니다. 이 할당자는 전체 메모리 영역을 할당하고 생성하는 대부분의 더 작은 개체에 대해 메모리를 사용합니다. Python은 이제 이 영역이 완전히 비어 있을 때(오랫동안 그렇지 않음) 이 영역을 해제하지만 실제로 영역을 비우는 것은 상당히 드뭅니다. Python 개체는 이동할 수 없기 때문에 일부 낙오자를 다른 영역으로 이동할 수 없습니다. 지역.