
Python3.6 부터는 Dict가 순서를 기억한다.
두줄요약
Python 3.6 딕셔너리의 내부 구조 변경으로 입력 순서와 메모리 효율을 함께 설명했습니다. 일반 dict와 OrderedDict의 동등성 비교 차이와 선택 기준을 정리했습니다.
구조와 흐름
- Python 3.5까지 해시된 키의 위치에 엔트리를 직접 저장하는 해시 테이블 구조
- Python 3.6부터 해시 위치별 엔트리 인덱스를 담는
indices와 삽입 순서대로 엔트리를 담는entries분리 indices를 거쳐entries에 접근하며 키 기반 조회와 입력 순서 유지
성능/운영 포인트
- 기존 구조의 빈 해시 슬롯마다
PyDictKeyEntry를 할당하던 메모리 낭비 축소 char타입indices와 필요 시 확장되는entries로 메모리 사용량 절감- 예시 기준 192 Bytes에서 80 Bytes로 감소
선택 이유
- Python 3.6 구현 변경으로 기본 딕셔너리의 입력 순서 유지
- Python 3.7부터 딕셔너리 입력 순서 보장 공식 지원
- 순서까지 포함한 동등성 검증이나 하위 호환성 요구 시
OrderedDict고려
주의할 점
- 기본 딕셔너리 동등성 비교는 항목 순서와 무관
OrderedDict동등성 비교는 항목 순서까지 반영- mutable 객체인 리스트와 딕셔너리는 해싱 불가로 딕셔너리 키 사용 불가

