Story 01 레퍼런스 카운트와 가비지 컬렉션

유동헌·2021년 9월 23일
0

열혈파이썬_중급

목록 보기
1/8

가비지 컬렉션

우리는 다음과 같은 상황에서 변수 s에 문자열이 저장되었다고 표현한다.

s = 'Garbage Collection'

그러나 사실은 문자열 객체에 s라는 이름이 붙은 상황이다. 즉 파이썬의 변수는 빈 상자가 아닌 떼었다가 붙였다 할 수 있는 포스트잇의 개념이다. 보통은 '변수에 문자열을 저장했다' 또는 '변수에 객체를 저장했다' 라는 식의 표현이 사용되고 또 그것이 더 자연스럽다. 하지만 지금 설명하는 파이썬의 가비지 컬렉션 메커니즘을 이애하려면 변수를 포스트잇으로 이해해야한다.

  • 변수 s가 문자열 ~~~ 을 참조한다.
  • 변수 s가 문자열 ~~~ 을 레퍼런스한다.
>>> r1 = [1,2,3,4]
>>> r2 = r1
>>> r2
[1, 2, 3, 4]
>>> r1 = 'simple'
>>> r2
[1, 2, 3, 4]
>>> r2 = 'happy'
>>> r2
'happy'
  • 소멸 대상

    객체를 아무도 참조하지 않은 상황

    일련의 소멸 규칙 및 과정을 가리켜 가비지 컬렉션이라고 한다.

  • 레퍼런스 카운트

    레퍼런스 카운트가 0이 되면 소멸 대상으로 등록된다.

파이썬 인터프리터

우리가 파이썬 코드를 작성하고 실행하면 이 코드는 먼저 바이트 코드라는 것으로 변환되어 어딘가에 저장된다. 그리고는 이 바이트 코드는 파이썬 가상 머신 위에서 실행이 된다. 비록 이러한 일련의 과정이 감춰져 있어서 우리 눈에 보이지는 않는다.

하드웨어 > 운영체제 > Python Virtual Machine → 파이썬 소스 코드 ——> 바이트 코드로 변환

즉 실제 파이썬 프로그램의 실행 주체는 파이썬 가상 머신, 줄여서 PVM이라 할 수 있으며 PVM에 의해 가비지 컬렉션도 진행이 된다. 그리고 지금 설명한 파이썬 코드 변환기와 가상 머신, 그리고 기본적으로 포함되는 각종 라이브러리를 묶어서 파이썬 인터프리터라고 한다.

파이썬 인터프리터의 종류

PVM 구현 방식에 따라 나뉨

  • C언어 → CPython
  • JAVA → Jython
  • 마이크로소프트, 닷넷 기반 → IronPython
profile
지뢰찾기 개발자

0개의 댓글