프로그래밍/Python

파이썬 가비지컬렉션

2020. 2. 7. 00:19

흥국생명 레프트 이재영 선수

 보통 C언어로 코딩할 때는 가비지컬렉션이 구현되어 있지 않아서 프로그래머가 직접 가비지컬렉션 기능을 사용하거나, 가비지컬렉션이 구현된 헤더파일을 include 하는 방식을 사용하는데 파이썬에서는 인터프리터단에서 자동으로 이 기능을 지원한다. 

 

 이 때 쓰이는 개념이 '레퍼런스 카운트'다. 레퍼런스 카운트란 말 그대로 '참조 수'인데, 다음과 같은 예시로 쉽게 이해할 수 있다. 

>>> var1 = [1,2,3] # Reference Count = 1
>>> var2 = var1 # Reference Count = 2
>>> var1 = 'python' # Reference Count = 1
>>> var2 = 1.0 # Reference Count = 0

 

 주석으로 달아놓은 Reference Count는 [1,2,3] 이라는 list 객체에 대한 reference count이다. 말 그대로 참조하는 변수의 개수라고 볼 수 있으며, 레퍼런스 카운트가 0일 경우 아무 변수도 해당 객체를 참조하지 않는 것이다. 인터프리터 입장에서는 레퍼런스 카운트가 0인 경우 쓸데없이 메모리를 허비하는 경우라고 판단하여 해당 메모리를 비워야 효율적이다. 하지만 인터프리터에서 레퍼런스 카운트가 0이 되었다고 해서 바로 free하는 것은 아니다. 성능에 영향을 줄 수 있는 작업이기 때문에 지정된 수거 빈도(python gc module에서 지정 가능)에 따라서 메모리를 관리한다.