Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 딕셔너리의 메모리 사용량은 어떻게 구성될까?

파이썬 딕셔너리의 내부 구조와 메모리 사용량

파이썬의 딕셔너리(dict)는 해시 테이블 기반으로 구현되어 있으며, 내부적으로 여러 개의 버킷(bucket)으로 이루어져 있습니다. 딕셔너리의 메모리 사용량을 이해하려면 먼저 각 버킷이 어떤 정보를 담고 있는지 알아야 합니다.

버킷 하나가 차지하는 메모리

각 버킷에는 다음과 같은 세 가지 정보가 저장됩니다.

  • 저장된 객체의 해시 코드(hash code) — 충돌 해결(collision resolution) 전략 때문에 버킷의 위치만으로는 그 값을 예측할 수 없습니다.
  • 키(key) 객체를 가리키는 포인터
  • 값(value) 객체를 가리키는 포인터

이 세 가지 정보를 모두 합치면 버킷 하나는 최소한 32비트 시스템에서 12바이트, 64비트 시스템에서 24바이트를 차지하게 됩니다.

딕셔너리의 크기 조정(리사이징) 방식

딕셔너리는 처음 생성될 때 8개의 빈 버킷으로 시작합니다. 이후 저장된 항목 수가 용량에 도달하면 버킷 수를 두 배로 늘려 크기를 재조정(resize)합니다. 이러한 동적 확장 메커니즘 덕분에 딕셔너리는 데이터가 많아져도 평균 O(1)의 빠른 조회 속도를 유지할 수 있습니다.

실제 메모리 사용량 확인 방법

실제로 딕셔너리가 얼마나 많은 메모리를 사용하는지 확인하려면 sys.getsizeof() 함수를 활용할 수 있습니다. 다만 이 함수가 반환하는 값은 딕셔너리 구조 자체의 크기일 뿐, 키와 값으로 저장된 개별 객체들의 크기는 포함되지 않는다는 점에 유의해야 합니다.