파이썬 기초편(2) - 레퍼런스 카운트와 가비지 컬렉션 본문
● 레퍼런스 카우늩와 가비지 컬렉션
s = 'Garbage Collection' # 변수 s가 문자열을 참조한다
r = [1, 2, 3] # 변수 r이 리스트를 참조한다
파이썬의 변수는 빈 상자가 아닌 떼었다 붙였다 할 수 있는 '포스트잇'의 개념이다. 문자열 객체에 s라는 이름이 붙은 것이다.
"변수 s가 문자열 'Garbage Collection'을 '참조(레퍼런스)한다."
r = [1, 2, 3]
r = 'simple' # 변수 r이 참조대상을 리스트에서 문자열로 바꿨다
'''
이 경우에서 리스트 [1,2,3]은 아무도 참조하지 않기 때문에 더이상 접근할 수 가 없어 '소멸 대상'이 된다
일단 소멸 대상으로 등록만 해두고 시스템에 시간적인 여유가 생길 때 소멸시키게 된다.
이러한 일련의 소멸 규칙 및 과정을 가리켜 '가비지 컬렉션(Garbage Collection)이라 한다
'''
# 객체를 참조하는 변수의 수 : '레퍼런스 카운터'
r1 = [1, 2, 3] # 리스트 [1, 2, 3]의 레퍼런스 카운트는 1
r2 = r1 # 리스트의 레퍼런스 카운트 2로 증가
r1 = 'simple' # 리스트의 레퍼런스 카운트 1 감소
re = 'happy' # 리스트의 레퍼런스 카운트가 0됨, 따라서 가비지 컬렉션 대상
● 파이썬 인터프리터
파이썬 코드(스크립트)를 작성하고 실행하면, 이 코드는 먼저 '바이트 코드'라는 것으로 변환되어 어딘가에 저장된다. 그리고 이 바이트 코드는 '파이썬 가상 머신(Python Virtual Machine)' 위에서 실행이 된다.
즉, 실제 파이썬 프로그램의 실행 주체는 파이썬 가상머신, 줄여서 PVM이라 할 수 있으며 PVM에 의해 가비지 컬렉션도 진행이 된다. 파이썬 코드 변환기와 가상머신, 기본적으로 포함되는 라이브러리들을 묶어서 '파이썬 인터프리터'라고 한다.
파이썬 인터프리터는 PVM(Pythonj Virtual Machine)의 구현 방식에 따라 나뉜다.
- PVM이 C로 구현되어 있는 가장 일반적이고 널리 사용되는 인터프리터 -> CPython
- PVM이 JAVA로 구현되어 있어서 자바에 대한 접근성이 좋은 인터프리어 -> JPython
- MS사의 닷넷(.NET) 기반으로 만들어지고 또 그 위에서 동작하는 인터프리터 -> IronPython
- 여기서 중심이 되는 것은 CPython이다
다만 다양한 종류의 인터프리터가 존재한다는 사실도 알아두자
'Programming > python' 카테고리의 다른 글
파이썬 기초편(2) - 깊은 복사와 얕은 복사 (0) | 2022.06.20 |
---|---|
파이썬 기초편(2) - 수정 가능한 객체와 수정 불가능한 객체 (0) | 2022.06.19 |
파이썬 기초편(1) - 예외처리 (0) | 2022.06.16 |
파이썬 기초편(1) - 클래스와 객체 (0) | 2022.06.14 |
파이썬 기초편(1) - 딕셔너리(Dictionary) (0) | 2022.06.14 |
Comments