inblog logo
|
devleekangho
    파이썬

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

    KangHo Lee's avatar
    KangHo Lee
    Jun 05, 2025
    [Python] 리스트는 iterable이지만 iterator는 아니다
    Contents
    ✅ 정의부터 정리📌 리스트는 왜 iterable이지, iterator는 아닐까?✅ 그럼 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
    Contents
    ✅ 정의부터 정리📌 리스트는 왜 iterable이지, iterator는 아닐까?✅ 그럼 iterator는?🧠 비유로 이해하기✅ 요약

    devleekangho

    RSS·Powered by Inblog