파이썬 객체 메모리 사용량 측정: sys.getsizeof() 완벽 가이드
파이썬에서 객체의 메모리 사용량을 확인해야 할 때 sys.getsizeof() 함수가 가장 직관적인 도구입니다. 하지만 이 함수의 동작 방식을 정확히 이해하지 못하면 의외의 결과에 당황할 수 있습니다.
기본 사용법
import sys
mylist = range(0, 10000)
print(sys.getsizeof(mylist)) # 48
왜 10,000개 요소가 고작 48바이트일까?
range() 함수는 실제 숫자 리스트를 메모리에 생성하지 않습니다. 대신 시작값, 끝값, 스텝만 저장하는 이터러블 객체를 반환하므로 메모리 효율이 극도로 높습니다. 이는 지연 평가(lazy evaluation) 방식의 전형적인 예시입니다.
실제 리스트와의 비교
리스트 컴프리헨션으로 실제 리스트를 생성하면 메모리 사용량이 급증합니다.
import sys
myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist)) # 87632 (약 87KB)
중요한 한계점
sys.getsizeof()는 객체 자체의 크기만 반환하며, 참조하고 있는 다른 객체들의 크기는 포함하지 않습니다. 중첩된 자료구조의 실제 메모리 사용량을 알고 싶다면 pympler 라이브러리의 asizeof나 직접 재귀 함수를 구현해야 합니다.
실무 팁
- 대용량 데이터 처리 시
range, 제너레이터, 이터레이터를 적극 활용하세요.
- 메모리 프로파일링이 필요하면
memory_profiler 패키지를 사용하세요.
sys.getsizeof()는 얕은 복사(shallow size)만 측정하므로 컨테이너 객체 측정 시 주의하세요.