본문 바로가기

프로그래밍언어/Python

[Python] 객체 LifeCycle과 Garbage Collection (Reference Counts)

반응형

■ 객체의 생명주기 (Object LifeCycle)

  - 객체의 생성부터 파괴, 해제까지의 기간

  1) Allocating memory space

  2) Binding or associating methods

  3) Initialization

  4) Destruction

 

■ 파이썬의 생명주기

  1) Definition

    - Python Interpreter에서 class를 정의한다.

  2) Initialization

    - __init__ 함수를 호출해서 새로운 instance를 생성하여 메모리를 할당하고 초기화한다.

    - __new__ 함수가 overriding 된 경우,instance 생성시에 __new__ 함수도 호출한다.

  3) Access and manipulation

    - 객체를 사용한다.

  4) Destruction

    - Python Garbage Collection에 의해서 객체가 파괴된다. (reference counting 사용)

    - 할당되었던 메모리는 해제되어 사용가능한 상태가 된다.

 

■ Python Garbage Collection

  - GC (Garbage Collector)는 malloc()과 free()와 같은 low-level의 메모리 관리를 하는 함수이다.

  - 기본적으로 reference counts 방식으로 구현되어있다.

 

■ Reference Counting

  - garbage collection 알고리즘에서 객체의 참조, 사용 등을 count하여 더 이상 호출되지 않는 객체의 deallocation에서 사용한다.

  - memory leak: block의 address를 해제할때 메모리가 free되지 않아서 사용중인 메모리가 해제되지 않아서 hold된 메모리는 프로그램이 종료될때까지 사용할 수 없다.

  - python의 reference counting

    • python의 모든 객체는 counter를 포함하고 있다.

    • 객체의 reference가 호출되어질때마다 count가 증가된다.

      ex) 변수에 객체 할당, list에 추가하거나 class instance에서 속성으로 추가되는 등 data structure에 객체 추가, 객체를 인수로 전달

    • 객체의 reference가 삭제될때마다 count 감소된다.

    • counter가 0이 되면 마지막 참조가 삭제되고 메모리가 해제된다.

 

[Reference]

  - https://technobeans.com/2012/01/17/object-lifetime-in-python/

  - en.wikipedia.org/wiki/Object_lifetime

  - https://docs.python.org/3/extending/extending.html#reference-counts

  - https://medium.com/dmsfordsm/garbage-collection-in-python-777916fd3189

 

반응형