[python] 가비지 컬렉션 동작 원리

가비지 컬렉션은 프로그램에서 더 이상 사용되지 않는 메모리를 자동으로 해제하는 기능을 가리킵니다. 파이썬은 동적으로 메모리를 할당하고 해제하는 언어로, 이러한 가비지 컬렉션 기능을 내장하고 있습니다. 이 기능은 메모리 누수를 방지하고 메모리를 효율적으로 관리하는 데 도움이 됩니다.

가비지 컬렉션의 원리

파이썬은 참조 카운트(Reference Count)와 순환 참조(Cyclic Reference)를 통해 가비지 컬렉션을 수행합니다.

1. 참조 카운트(Reference Count)

모든 객체는 참조 카운트를 가지고 있습니다. 객체가 다른 객체에 의해 참조될 때마다 해당 카운트가 증가하고, 참조가 제거될 때마다 감소합니다. 참조 카운트가 0이 되면 그 객체는 더 이상 사용되지 않으므로 메모리에서 자동으로 해제됩니다.

예시:

# 참조 카운트 증가
a = [1, 2, 3]
b = a  # a를 b가 참조
# 참조 카운트 감소
b = None  # b의 참조를 해제

2. 순환 참조(Cyclic Reference)

순환 참조는 두 개 이상의 객체들이 서로를 참조하는 상황을 가리킵니다. 이러한 순환 참조가 발생하면 참조 카운트만으로는 해제할 수 없는 메모리 누수 상황이 발생합니다. 파이썬은 이를 해결하기 위해 세대(generation)라는 개념을 도입했습니다.

세대(Generation) 기반 가비지 컬렉션

파이썬은 객체의 수명 주기에 따라 세대를 나누어 가비지 컬렉션을 수행합니다. 새로운 객체는 첫 번째 세대에 할당되고, 시간이 지날수록 해당 객체의 참조 카운트가 증가하면 더 오래된 세대로 이동합니다. 이렇게 세대를 나눔으로써 메모리 사용을 효율적으로 관리할 수 있습니다.

결론

파이썬의 가비지 컬렉션은 참조 카운트와 세대 기반의 방식을 통해 메모리를 효율적으로 관리하고 메모리 누수를 방지합니다. 이를 통해 개발자는 메모리 관리에 대해 덜 걱정하고 더 나은 코드를 작성할 수 있습니다.

참고 자료: 파이썬 공식 문서 - Garbage Collection

Python Garbage Collection In-Depth

Python’s Garbage Collection: The Essential Guide