1 minute read

본 포스팅은 “윤성우의 열혈 파이썬 중급편” 책 내용을 기반으로 작성되었습니다. 잘못된 내용이 있을 경우 지적해 주시면 감사드리겠습니다.

1-1. 가비지 컬렉션

다음 코드를 보자.

laugh = '푸헤헿'

우리는 이를 보고 “변수 laugh에 문자열 ‘푸헤헿’을 저장했다.”고 표현한다.

하지만 상기 코드는 다음과 같음을 알고 있어야 한다.

“변수 laugh가 문자열 ‘푸헤헿’을 참조(Reference)한다.”

즉, 포스트잇 마냥 가져다 붙이고 이를 참조하는 것으로 봐야한다는 것이다. 포스트 잇을 뗀다면 참조가 불가능 할 것이다.

다음 코드를 보자

today = ['공부하자', '운동하자']    # today라는 이름으로 리스트 참조
today = '게임 좀 만 할까'           # 변수 today가 참조 대상을 문자열로 바꿈

위 상황에서 [‘공부하자’, ‘운동하자’]는 아무도 참조하지 않으므로 소멸 대상이 된다. 메모리에 남겨봤자 공간만 차지하기 때문이다. 일단 소멸 대상으로 등록만 해두고, 시스템에 시간적인 여유가 생길 때 소멸시키게 된다.

이러한 소멸 규칙 및 과정을 가리켜 ‘가비지 컬렉션’ 이라고 한다.

1-2. 레퍼런스 카운트

today = ['공부하자', '운동하자']    # 리스트 ['공부하자', '운동하자'] 의 레퍼런스 카운트는 1
tomorrow = today                    # 리스트 ['공부하자', '운동하자'] 의 레퍼런스 카운트 2로 증가
today = '게임 좀 만 할까'           # 리스트 ['공부하자', '운동하자'] 의 레퍼런스 카운트 1로 감소
tomorrow = '애들이랑 술 먹을까'     # 리스트 ['공부하자', '운동하자'] 의 레퍼런스 카운트 0 됨 -> 가비지 컬렉션 대상

객체를 참조하는 변수의 수를 가리켜 ‘레퍼런스 카운트’라 한다. 자세한 내용은 코드 주석을 참고하자. 레퍼런스 카운트가 0 이라는 것은 소멸 대상으로 등록되어 조만간 소멸된다는 뜻이다.

1-3. 파이썬 인터프리터

파이썬 코드를 작성하고 실행하면, 해당 코드는 파이썬 코드 변환기에 의해 ‘바이트 코드’로 먼저 변환되어 어딘가에 저장된다. 바이트 코드는 ‘파이썬 가상 머신’ 위에서 실행된다. 따라서, 파이썬 프로그램의 실행 주체는 파이썬 가상 머신이라 할 수 있다. 가비지 컬렉션도 파이썬 가상 머신에서 진행된다.

파이썬 코드 변환기, 파이썬 가상 머신, 기본적인 라이브러리들을 묶어 ‘파이썬 인터프리터’라 한다.

파이썬 인터프리터는 파이썬 가상머신의 구현 방식에 따라 그 종류가 나뉜다. 파이썬 가상머신이 C언어로 구현되어 있는 인터프리터는 CPython(가장 일반적이고 널리 사용됨), 파이썬 가상머신이 자바로 구현되어 있는 인터프리터는 Jython 이라 한다.

Leave a comment