본문 바로가기

Language/Python

Python 04 - 변수의 주소와 메모리 관리

 파이썬에서 변수의 주소는 어떻게 지정될까?

이에 대해서 알아보기 전에 파이썬의 메모리 관리 방법에 대해서 우선적으로 알 필요가 있다.

 

파이썬은 인터프리터가 내부에 가비지 컬렉터(garbage collector)라는 메모리 관리 프로그램이 존재한다. 가비지 컬렉터는 가비지 컬렉션(garbage collection)이라는 알고리즘으로 메모리를 관리하는데, 파이썬에서 사용하는 가비지 컬렉션 알고리즘은 참조 카운팅 방식((Reference Counting)이다. 

 

우리는 a라는 변수에 객체가 할당된다고 하면 " a라는 공간에 객체를 담는구나 ! " 라고 보통은 생각한다. 하지만 실제로는 조금 다르게 동작한다. 

 

a라는 변수는 실제로는 객체가 담긴 공간의 주소를 가리킨다. 이를 a 변수가 어떤 객체를 '참조 한다'라고 한다.

 

예를 들어서 a = "hello" , b=100 을 해석하면 "hello"라는 문자열 객체를 변수 a가 참조한다, 100이라는 숫자 객체를 변수 b가 참조한다 와 같이 표현할 수 있다.

 

파이썬 인터프리터는 이렇게 객체를 참조하는 변수가 있다면 메모리에 그만큼의 공간을 할당해준다. 그러다 객체를 참조하는 변수가 없다면 그 메모리를 해제하고 회수하는 방법으로 메모리를 관리한다.

 

예를 들어 a = 1000 과 같이 변수가 "hello" 객체를 더이상 참조하지 않고 1000이라는 객체를 참조하면 "hello"라는 문자열 객체에 대한 메모리 공간은 회수되고 1000 이라는 숫자 객체에 대한 공간을 할당해주는 것이다.

 

이러한 방법을 참조 카운팅(Reference Counting) 방법이라 한다.

 

그렇다면 우리는 이제 변수의 주소가 어디를 가리키는지 알 수 있다. 변수가 참조하는 객체의 주소가 바로 변수의 주소이다!

 

파이썬은 이런 효율적인 방법을 이용해서 자동으로 메모리를 관리하여 사용자의 수고를 덜어주는 좋은 기능을 가지고 있다.