Python에서
리스트(list)
는 iterable(반복 가능) 하지만, iterator(반복자)는 아닙니다.이 차이를 명확히 이해하려면 개념부터 정리해야 합니다.
✅ 정의부터 정리
구분 | iterable | iterator |
의미 | 반복 가능한 객체 | 값을 하나씩 꺼낼 수 있는 객체 |
주요 메서드 | __iter__() | __iter__() , __next__() |
사용 예 | list, tuple, str, dict 등 | iter(list), 파일 객체, generator 등 |
예시 | for x in [1,2,3]: | it = iter([1,2,3]); next(it) |
📌 리스트는 왜 iterable이지, iterator는 아닐까?
▶ iterable인 이유
- 리스트는
__iter__()
메서드를 가지고 있음.
- 따라서
for
루프에서 사용할 수 있음.
lst = [1, 2, 3]
it = lst.__iter__() # 가능! 즉, iterable임
▶ iterator가 아닌 이유
- 리스트 자체는
__next__()
메서드를 가지고 있지 않음.
- 따라서
next(lst)
는 에러 발생.
next(lst) # ❌ TypeError: 'list' object is not an iterator
✅ 그럼 iterator는?
리스트를
iterator
로 바꾸면 다음과 같이 작동합니다:lst = [1, 2, 3]
it = iter(lst) # iterator 생성
print(next(it)) # 1
print(next(it)) # 2
iter(lst)
는 리스트에서 하나씩 꺼낼 수 있는 상태를 가진 객체로 변환해주는 것입니다.🧠 비유로 이해하기
list
는 책
→ 읽을 수는 있지만, 어디까지 읽었는지 기억하진 않음.
iterator
는 책갈피가 있는 책
→ 다음에 어디를 읽을지 알고 있음.
✅ 요약
- list는
__iter__()
는 있으나__next__()
는 없음 → iterable임
- iterator는 둘 다 있어서
next()
로 순회 가능
iter()
를 통해 iterable → iterator로 변환 가능
Share article