더북(TheBook)

첫 번째 줄에서 my_dict.keys()를 순환하는 것은 my_dict 자체를 순환하는 것과 완전히 동일하기 때문에 적절하지 않습니다. 이 안에서는 서로 약간 다른 형태의 객체가 생성되는데, my_dict.keys()의 경우 dict_keys가 생성되며, 사전 자체가 사용될 경우 dict_keyiterator가 생성됩니다. 하지만 대부분 두 객체는 동일한 용도로 사용되기 때문에 실제 코드에서 이 차이를 실감하는 경우는 거의 없습니다.

>>> my_dict = {c:ord(c) for c in "Bread and butter"}
>>> type(my_dict.keys())
<class 'dict_keys'>
>>> type(iter(my_dict))
<class 'dict_keyiterator'>

구체적으로 말하면 모든 사전에 대해 항상 다음과 같은 정체성이 적용됩니다. 물론 매우 비정상적인 경우, dict의 하위 클래스나 일부 사용자 정의 사상에서 이 정체성이 깨지는 경우가 있을 수 있습니다.

>>> all(a is b for a, b in zip(iter(my_dict), iter(my_dict.keys())))
True

다시 말해 키를 순환하고 싶다면 그냥 다음과 같이 작성하면 됩니다.

for key in my_dict:
    process(key, my_dict[key])
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.