더북(TheBook)

딕셔너리, 리스트, 튜플, 집합은 사용하기 너무 쉽기 때문에 지나치게 확장하면서 깨지기 쉬운 코드를 작성할 위험이 있다. 예를 들어 SimpleGradebook 클래스를 확장해서 전체 성적이 아니라 과목별 성적을 리스트로 저장하고 싶다고 하자. _grades 딕셔너리를 변경해서 학생 이름(키)이 다른 딕셔너리(값)로 매핑하게 하고, 이 딕셔너리가 다시 과목(키)을 성적의 리스트(값)에 매핑하게 함으로써 과목별 성적을 구현할 수 있다. 다음 코드는 내부 딕셔너리로 defaultdict의 인스턴스를 사용해서 과목이 없는 경우를 처리한다(아이템 27 “내부 상태에서 원소가 없는 경우를 처리할 때는 setdefault보다 defaultdict를 사용하라”에서 배경 지식을 볼 수 있다).