Garbage Collection(GC)
Python의 모든 객체는 자신이 얼마나 많이 참조되고 있는지 refcnt 값을 가집니다. Garbage Collector는 데이터를 순회하면서 refcnt=0이 되는 객체를 찾아 garbage collection을 수행합니다.

__del__(소멸자, Destructor)
Python 클래스를 정의할 때 지정할 수 있는 함수입니다. 만약 GC가 시행될 때 해당 객체의 클래스에 __del__이 선언되어 있다면, 이를 실행합니다.
class Garbage():
def __init__(self): # 생성자 : 인스턴스 생성시 실행됨
print("object initialized")
def __del__(self): # 소멸자 : 인스턴스 삭제시 실행됨
print("object deleted")
객체가 서로를 순환 참조할 경우, refcnt=0가 되는 일이 없습니다. 이 때는 garbage collector가 이들의 순환 참조 여부를 확인할 때 까지 __del__의 실행이 지연됩니다.
del
del은 __del__과 이름이 비슷하지만, 기능이 다릅니다. del x 실행 시, 변수 이름 x와 그 이름이 가리키던 객체 사이의 연결을 끊습니다. 즉, 해당 객체의 참조 횟수 refcnt를 1 감소시킵니다.
a = [1, 2, 3] # '1'의 refcnt = 1
b = a[0] # '1'의 refcnt = 2
del a[0] # 맨 앞 요소를 삭제 -> '1'의 refcnt = 1
print(int_list) # [2, 3]
만약 x가 그 객체를 가리키던 마지막 이름표였다면, 참조 횟수가 0이 되어 garbage collector의 삭제 대상이 됩니다. 하지만 다른 변수(y = x)가 여전히 가리키고 있다면, 객체는 메모리에 그대로 남습니다.
728x90
'Language > Python' 카테고리의 다른 글
| [Python] Library | 08. asyncio (0) | 2026.02.15 |
|---|---|
| [Python] Closure (0) | 2026.02.15 |
| [Python] 동시성과 GIL(Global Interpreter Lock) (0) | 2026.02.15 |
| [Python] Syntax | 02. List (0) | 2026.02.15 |
| [Python] Syntax | 01. yield (0) | 2026.02.15 |