파이썬에서 딕셔너리의 키와 값을 순회할 때 사용하는 items()와 iteritems() 메서드는 버전에 따라 동작 방식과 지원 여부가 다릅니다. 이 글에서는 두 메서드의 차이점을 파이썬 2.x와 3.x 기준으로 명확하게 정리해 드립니다.
Python 2.x에서의 차이점
Python 2.x에서는 두 메서드를 모두 사용할 수 있지만, 내부적으로 동작하는 방식이 서로 다릅니다.
dict.items()
items() 메서드는 딕셔너리 객체의 모든 키-값 쌍을 리스트(list) 형태로 반환합니다. 반환되는 리스트의 각 요소는 키와 값으로 이루어진 2개 요소의 튜플(tuple)입니다.
dict.iteritems()
iteritems()는 제너레이터(generator)로 동작하며, 딕셔너리 항목에 대한 반복자(iterator)를 제공합니다. 전체 목록을 한 번에 메모리에 올리지 않고 항목을 하나씩 순회하기 때문에 대용량 데이터 처리 시 메모리 효율이 더 좋습니다.
>>> d = {'1': 1, '2': 2, '3': 3}
>>> d.items()
[('1', 1), ('2', 2), ('3', 3)]
>>> for i in d.iteritems():
print i
('1', 1)
('2', 2)
('3', 3)
Python 3.x에서의 변화
Python 3.x부터는 iteritems()가 더 이상 지원되지 않습니다(deprecated). 대신 items() 메서드가 Python 2의 iteritems()처럼 동작하도록 변경되었습니다.
Python 3의 items()는 dict_items라는 뷰(view) 객체를 반환하며, 이 객체는 반복 가능(iterable)하기 때문에 for 문에서 바로 사용할 수 있습니다.
>>> d = {'1': 1, '2': 2, '3': 3}
>>> d.items()
dict_items([('1', 1), ('2', 2), ('3', 3)])
>>> for i in d.items():
print (i)
('1', 1)
('2', 2)
('3', 3)
정리
- Python 2.x:
items()는 리스트를 반환하고,iteritems()는 반복자를 반환합니다. - Python 3.x:
iteritems()는 제거되었으며,items()가 뷰 객체를 반환하여 반복자처럼 동작합니다. - Python 2 코드를 Python 3로 마이그레이션할 때는
d.iteritems()를d.items()로 교체하면 됩니다.