[Python] 리스트는 iterable이지만 iterator는 아니다

KangHo Lee's avatar
Jun 05, 2025
[Python] 리스트는 iterable이지만 iterator는 아니다
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

devleekangho