gc — 가비지 컬렉터 인터페이스
gc — 가비지 컬렉터 인터페이스
gc 모듈은 선택적 가비지 컬렉터에 대한 인터페이스를 제공해요. 컬렉터를 비활성화하거나, 수집 주기를 조정하거나, 디버깅 옵션을 설정할 수 있어요. 또한 컬렉터가 찾았지만 해제하지 못한 도달 불가능한 객체(참조 순환으로 인해 메모리에서 풀리지 않는 객체)에 접근할 수도 있어요.
컬렉터는 파이썬에서 이미 사용하는 레퍼런스 카운팅을 보완하기 때문에, 프로그램이 참조 순환을 만들지 않는다고 확신한다면 컬렉터를 비활성화할 수 있어요. 자동 수집은 gc.disable()을 호출하면 꺼져요. 메모리 누수가 있는 프로그램을 디버깅하려면 gc.set_debug(gc.DEBUG_LEAK)를 호출해요. 여기에는 gc.DEBUG_SAVEALL이 포함되어, 가비지 컬렉트된 객체가 검사 목적으로 gc.garbage에 저장돼요.
본문
함수
gc.enable() — 자동 가비지 컬렉션을 활성화해요.
gc.disable() — 자동 가비지 컬렉션을 비활성화해요.
gc.isenabled() — 자동 컬렉션이 활성화되어 있으면 True를 반환해요.
gc.collect(generation=2) — 인자 없이 호출하면 전체 컬렉션을 실행해요. 선택적 인자 generation은 수집할 세대(0부터 2까지)를 지정하는 정수예요. 세대 번호가 유효하지 않으면 ValueError가 발생해요. 수집된 객체 수와 수집 불가능한 객체 수의 합이 반환돼요.
일부 내장 타입이 유지하는 프리 리스트(free list)는 전체 컬렉션 또는 최고 세대(2)의 컬렉션이 실행될 때마다 비워져요. 특정 구현, 특히 float의 경우 일부 프리 리스트의 항목이 해제되지 않을 수 있어요.
인터프리터가 이미 컬렉션을 수행하는 동안 gc.collect()를 호출하는 효과는 정의되어 있지 않아요.
버전 3.14에서 변경: generation=1은 컬렉션의 증분을 수행해요. 버전 3.14.5에서 변경: generation=1은 중간 세대의 컬렉션을 수행해요.
gc.set_debug(flags) — 가비지 컬렉션 디버깅 플래그를 설정해요. 디버깅 정보는 sys.stderr에 기록돼요. 아래 나열된 디버깅 플래그를 비트 연산으로 조합해 디버깅을 제어할 수 있어요.
gc.get_debug() — 현재 설정된 디버깅 플래그를 반환해요.
gc.get_objects(generation=None) — 컬렉터가 추적하는 모든 객체의 리스트를 반환해요(반환된 리스트 자체는 제외). generation이 None이 아니면 해당 세대에 있는 객체만 반환해요.
gc.get_stats() — 컬렉터의 현재 통계 정보를 담은 dict 리스트를 반환해요.
gc.get_referrers(*objs) — 임의의 객체를 직접 참조하는 객체의 리스트를 반환해요.
gc.get_referents(*objs) — 인자로 전달된 객체가 직접 참조하는 객체의 리스트를 반환해요.
gc.is_tracked(obj) — 객체가 현재 컬렉터에 의해 추적되고 있으면 True를 반환해요.
gc.freeze() — 컬렉터가 추적하는 모든 객체를 영구적으로 고정해요. 고정된 객체는 이후의 가비지 컬렉션에서 무시되며, 도달 가능한 것으로 간주돼요.
예외
exception gc.GarbageCollectionError — 가비지 컬렉션 작업을 수행하는 중 오류가 발생했을 때 발생하는 예외예요.
디버깅 플래그
gc.DEBUG_STATS — 컬렉션 후에 통계 정보를 출력해요.
gc.DEBUG_COLLECTABLE — 컬렉션 가능한 객체가 발견되면 이를 출력해요.
gc.DEBUG_UNCOLLECTABLE — 컬렉션 불가능한 객체가 발견되면 이를 출력해요.
gc.DEBUG_SAVEALL — 컬렉션 불가능한 객체를 gc.garbage에 저장해요.
gc.DEBUG_LEAK — DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_SAVEALL과 동일해요.