목록 보기
Python3.6 부터는 Dict가 순서를 기억한다.
백엔드

Python3.6 부터는 Dict가 순서를 기억한다.

화해
화해
2021년 8월 26일

두줄요약

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 객체인 리스트와 딕셔너리는 해싱 불가로 딕셔너리 키 사용 불가

다음 읽기

같은 회사의 연관 글

화해 개발팀이 일하는 법 | 백엔드 개발자가 말하는 화해 개발팀

화해 백엔드 개발자의 역할과 성능·안정성 개선 노력을 소개했습니다. 소통, 코드 리뷰, 회고 중심의 개발 문화를 공유했습니다.

화해
화해
기타

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...