본문 바로가기
Python

파이썬 메모리 관리

by GGoris 2014. 12. 23.
반응형

이 글은 '열혈강의 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



또한 id값을 비교하여 두  변수가 같은 객체를 참조하는지도 확인 할 수 있습니다.
>>> b=500
>>> id(b)
7119064
>>> id(z)==id(y)
True
>>> id(b)==id(z)
False
>>> x is z
True
>>> b is y
False


같은 객체가 아닌 값을 비교하려면 앞서 보았던 '=='연산자를 사용합니다.

>>> b==y

True

>>> a==z

False

>>> z==y

True



반응형

'Python' 카테고리의 다른 글

파이썬 수치자료형  (0) 2014.12.25
파이썬 제어문  (0) 2014.12.23
파이썬 기본 자료형  (0) 2014.12.22
파이썬 기본 문법  (0) 2014.12.22
파이썬 시작하기!  (0) 2014.12.22

댓글