콘텐츠로 건너뛰기
Home » 캐싱

캐싱

(파이썬) 약한 참조 사용하기

파이썬과 C를 비교하면서 차이점을 이야기하는 사람 중에는 “파이썬은 별도의 메모리 관리가 필요없다”는 이야기를 하는 사람들이 있다. 실제로 프로그램이 실행되는 동안 객체를 위한 메모리는 파이썬에 의해 자동으로 할당받게 되고, 객체의 파괴 역시 대부분 파이썬이 자동으로 처리한다. 따라서 파이썬 코드에서는 malloc()이나 free() 같은 메모리 관리를 위한 코드가 존재하지 않는 것은 사실이다.

파이썬에서 메모리 관리에 있어 가장 주요한 개념은 참조수인데, 참조수는 어떤 객체 외부에서 그 객체를 참조하는 지점의 개수이다. 즉 어떤 객체를 누군가 참조한다는 것은, 외부의 누군가가 그 객체가 계속 살아있기를 원한다는 의미이므로 그 수명을 유지하게 하며, 반대로 이러한 참조점이 없는 객체는 사용할 수 없는 객체가 되기 때문에 파괴되어도 상관없다는 의미가 된다.

파이썬의 모든 것은 객체이고, 모든 파이썬 변수는 객체에 붙는 이름이다. 즉 객체에 어떤 이름이 붙었다는 것은 이 객체를 참조하는 곳이 한 군데 생겼다는 뜻이다. 그 외에 객체가 다른 객체의 속성으로 바인딩되는 것도 참조수를 늘리는 것이며, 리스트나 사전과 같은 컨테이너에 포함되는 것도 참조수가 증가하는 효과를 갖는다.

만약 그 이름이 다른 객체를 가리키도록 바뀌게 되면, 파이썬은 내부적으로 참조수를 1 떨어뜨린다. 그리하여 참조수가 0이된 객체는 그냥 그 자리에서 즉시 파괴되는 식이다. 그러니, 별도로 사용하지 않는 객체를 명시적으로 파괴하는 코드를 호출할 필요가 없는 것이다. 하지만 세상 일이란게 단순해보이더라도 그게 늘 마음처럼 한결같지는 않은 법이다. 이러한 참조수에 의한 메모리 관리가 실패할 수 있는 경우와, 그럼 문제를 어떻게 해결할 수 있는지를 살펴보도록 하자.

더 보기 »(파이썬) 약한 참조 사용하기