IT 그리고 정보보안/Knowledge base

파이썬 객체 주소 식별과 레퍼런스 카운트

plummmm 2021. 4. 13. 07:39
반응형

객체의 주소를 식별할 때 id라는 내장 함수를 사용한다.

C언어에서는 포인터를 사용해야 할 것을..

파이썬에선  = 이 객체 링크, == 이 값 할당 이므로

b=a 이런식으로 하면 b가 a와 같은 주소를 가르키게 하는 것이다.

 

 

주소가 같은지 확인하는 방법도 있다.

 

Reference count (래퍼런스 카운트)

파이썬의 모든 객체들은 래퍼런스 카운트라는 값을 갖는다.

파이썬에선 사용자가 딱히 메모리에 신경 쓸 필요가 없다. 안쓰면 알아서 제거하고

필요하면 알아서 확장해준다.  (알아서 제거 하는 일을 Garbage Collection(쓰레기 수집) 이라고 한다.)

 

이 때, "알아서" 는 어떻게 이루어지는 것일까. 요 개념에서 래퍼런스 카운트 라는 녀석이 나온다.

 

모든 객체들은 래퍼런스 카운트라는 값을 가진다.

얼마나 많은 부분에서 이 객체를 사용하고 있는지를 나타내는 정수 지표이다.

사용하는 만큼 카운트가 올라가고, 0이 되면 메모리에서 떠내려간다.

 

 

그림 보면 대충 이해가 갈거라고 생각한다.

getrefcount() 함수를 이용하여 알아볼 수 있는데, 실제 값보다 1크게 나온다.

함수가 객체를 사용하기 위해 카운트를 하나 늘렸기 때문이다.

반응형