파이썬 소멸 시기
파이썬과 자바의 공통점은 메모리를 프로그래머가 관리 하지 않는다는 것이다.
메모리 관리를 대신 해주는 무언가가 존재한다는 말이다.
그 역할을 가비지 컬렉션과 레퍼런스 카운터가 맡는다.
레퍼런스 카운트는 해당 변수(객체)가 사용되고 있는 지를 나타낸다.
가비지 컬렉션는 레퍼런스 카운트가 0이 되는 순간 메모리를 수거해간다.
📌가비지 컬렉션
가비지 컬렉션
가비지 컬렉션는 레퍼런스 카운터가 0이 되는 순간 객체의 메모리를 수거해 간다.
📌레퍼런스 카운트
레퍼런스 카운트
레퍼런스의 뜻은 '참조'라는 뜻이다.
즉 레퍼런스는 해당 변수 or 객체가 참조 되고 있는지를 확인한다.
따라서 레퍼런스 카운트가 0이 되는 변수를 가비지 컬렉터가 수거해가는 것이다.
📌객체의 생성과 소멸
# Python
list_1= [1,2,3]
list_2 = list_1
# list_1과 list_2가 참조하는 대상(객체)이 같습니까?
if list_1 is list_2:
print('list_1과 list_2는 같은 객체를 참조합니다.')
# list_1과 list_2가 참조하는 대상에 담긴 값이 같습니까?
if list_1 == list_2:
print('list_1과 list_2가 참조하는 객체에 담긴 값이 같습니다.')
현재 리스트는 [1,2,3] 딱 1개만 존재한다.
[1,2,3] 리스트 하나를 list_1 변수와 list_2 변수가 참조하고 있는 형태이다.
따라서 이 list [1,2,3]의 레퍼런스 카운터는 2이다.
하나 더 알 수 있는 것이 있다.
'=='는 참조하는 대상에 담긴 값이 같느냐를 확인한다.
'is'는 참조하는 대상이 같냐를 확인한다는 것을 알 수 있다.
list_1 = 'Skinny Brown'
list_1 변수가 'Skinny Brown'을 참조하도록 변경했다.
[1,2,3] 리스트의 레퍼런스 카운트는 1이다.
동시에 'Skinny Brown'이라는 문자열의 레퍼런스 카운트는 1이 된다.
여기서 list_2 변수가 다른 객체를 참조하도록 변경하면 어떻게 될까?
리스트 [1,2,3]은 가비지 컬렉터가 메모리 공간을 수거해간다.
'객체 지향 프로그래밍 > Python' 카테고리의 다른 글
변경 불가능한 자료형 주의하기 (0) | 2021.03.10 |
---|---|
파이썬은 정말 인터프리터 언어일까? (1) | 2021.03.10 |
파이썬 - 입/출력, 자료구조 빠르게 정리하기 (9) | 2021.01.07 |
[재귀] Recursion - Python (0) | 2020.12.20 |
[파이썬 기초] - List, Set (Python) (2) | 2020.12.19 |