이 글은 '열혈강의 Python 개정판ver.2'를 참고로 작성하였습니다.
'열혈강의 Python 개정판ver.2' 이강성저 프리렉
RaspberryPI에 Raspbian을 사용하였습니다.
파이썬 메모리 관리
파이썬에서 메모리 관리는
시스템이 자동으로 생성해주고
자동으로 환원 해줍니다.
따라서 사용자가 특별히 해주어야 할 일은 없습니다.
가비지 컬렉션
가비지 컬렉션(Garbage Collection)이란
더이상 참조되지 않는 메모리를 시스템이 알아서 환원해주는 작업을 말 합니다.
파이썬에서는 모든것이 객체로 관리 되고
각 객체들은 레퍼런스 카운터를 갖게 됩니다.
이 카운터가 0 즉, 그 누구도 참조하지 않게 된다면
메모리를 환원 하게 됩니다.
다음의 예로 간단히 알아보겠습니다.
>>> x = y = z = 500
위의 그림처럼 500이라는 데이터를 가진 메모리에
3의 레퍼런스카운트가 생깁니다.
>>>del x
위처럼 레퍼런스 카운터를 하나 잃어 2가 됩니다.
>>>y=2
>>>x=3
500은 레퍼런스 카운터를 모두 잃게 되어 Garbage Collection에 의해 환원됩니다.
레퍼런스 카운트와 레퍼런스 ID
레퍼런스 카운트는 sys모듈의 getrefcount함수를 이용해 확인 할 수 있습니다.
>>> import sys
>>> x=y=z=500
>>> sys.getrefcount(z)
4
x,y,z 3개뿐인데 왜 4가 나올까?
이것은 getrefcount가 z객체를 처리하기위해
추가로 1이 생깁니다.
따라서 실제 카운트는 4-1값인 3이 되게 됩니다.
내장함수 'id'를 통해 같은 값을 갖는지 확인 할 수 있습니다.
>>> a=1
>>> id(z)
7119088
>>> id(y)
7119088
>>> id(a)
6934704
같은 객체가 아닌 값을 비교하려면 앞서 보았던 '=='연산자를 사용합니다.
>>> b==y
True
>>> a==z
False
>>> z==y
True
댓글