■ 객체의 생명주기 (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
'프로그래밍언어 > Python' 카테고리의 다른 글
[Python] 비동기 프로그래밍 (asyncio) (0) | 2021.04.08 |
---|---|
[Python] 프로젝트 패키징 & 배포 (0) | 2021.04.01 |
[Python] 정규 표현식 (Regular Expressions) (0) | 2021.03.08 |
ch05. 파이썬 날개달기 (내장함수, 라이브러리) (0) | 2021.03.06 |
ch05. 파이썬 날개달기 (패키지, 예외처리) (0) | 2021.03.01 |