더북(TheBook)

이런 일이 발생하는 이유는 예전의 딕셔너리 구현이 내장 hash 함수와 파이썬 인터프리터가 시작할 때 초기화되는 난수 씨앗값(seed)을 사용하는 해시 테이블 알고리즘으로 만들어졌기 때문이다. 인터프리터 실행 시마다 달라지는 난수 씨앗값과 hash가 어우러지면서 딕셔너리의 순서가 삽입 순서와 일치하지 않고 프로그램을 실행할 때마다 달라졌다.

파이썬 3.6부터는 딕셔너리가 삽입 순서를 보존하도록 동작이 개선됐고, 파이썬 3.7부터는 아예 파이썬 언어 명세에 이 내용이 포함됐다. 이제 다음 코드는 프로그래머가 원래 생성한 순서대로 딕셔너리의 내용을 표시한다.

baby_names = {
    'cat': 'kitten',
    'dog': 'puppy',
}
print(baby_names)

>>>    
{'cat': 'kitten', 'dog': 'puppy'}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.