더북(TheBook)

누가 투표했는지 저장하는 리스트 대신 카운터를 사용하는 최초 예제로 돌아가보자. 이 경우 왜 setdefault를 사용하지 않았을까? 다음은 같은 예제를 setdefault를 사용해 구현한 코드다.

count = counters.setdefault(key, 0)
counters[key] = count + 1

여기서 문제는 setdefault 호출이 불필요하다는 점이다. 카운터를 증가시키고 나면 그 값을 항상 딕셔너리에 저장해야 한다. 따라서 setdefault가 수행하는 디폴트 값 대입은 불필요하다. 처음에 본 get을 사용하는 접근 방법은 키가 없을 때 키를 한 번 읽고 한 번 대입해서 카운터를 증가시킬 수 있지만, setdefault를 사용하면 키를 한 번 읽고 대입을 두 번 해야 한다.