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

Python에서 가비지 수집은 어떻게 작동합니까?


Python은 불필요한 객체(내장 유형 또는 클래스 인스턴스)를 자동으로 삭제하여 메모리 공간을 확보합니다. Python이 더 이상 사용하지 않는 메모리 블록을 주기적으로 해제하고 회수하는 프로세스를 Garbage Collection이라고 합니다.

Python의 가비지 수집기는 프로그램 실행 중에 실행되며 개체의 참조 횟수가 0에 도달하면 트리거됩니다. 개체의 참조 횟수는 개체를 가리키는 별칭 수가 변경됨에 따라 변경됩니다.

객체의 참조 횟수는 새 이름이 지정되거나 컨테이너(목록, 튜플 또는 사전)에 배치될 때 증가합니다. 개체의 참조 횟수는 del로 삭제되거나 참조가 재할당되거나 참조가 범위를 벗어날 때 감소합니다. 개체의 참조 횟수가 0에 도달하면 Python이 자동으로 수집합니다.

a = 40      # Create object <40>
b = a       # Increase ref. count  of <40>
c = [b]     # Increase ref. count  of <40>
del a       # Decrease ref. count  of <40>
b = 100     # Decrease ref. count  of <40>
c[0] = -1   # Decrease ref. count  of <40>
의 수

일반적으로 가비지 수집기가 분리된 인스턴스를 파괴하고 해당 공간을 회수할 때 이를 눈치채지 못할 것입니다. 그러나 클래스는 인스턴스가 파괴되려고 할 때 호출되는 소멸자라고 하는 특수 메서드 __del__()을 구현할 수 있습니다. 이 방법은 인스턴스에서 사용하는 비메모리 리소스를 정리하는 데 사용할 수 있습니다.

예시

이 __del__() 소멸자는 곧 파괴될 인스턴스의 클래스 이름을 출력합니다 -

#!/usr/bin/python
class Point:
   def __init__( self, x=0, y=0):
      self.x = x       self.y = y    def __del__(self):
      class_name = self.__class__.__name__       print class_name, "destroyed"
 pt1 = Point()
pt2 = pt1 pt3 = pt1
print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts
del pt1
del pt2
del pt3

출력

위의 코드를 실행하면 다음과 같은 결과가 나온다 -

3083401324 3083401324 3083401324
Point destroyed