면접 스터디에서 질문 iterator와 iterable의 차이점은 무엇입니까? 에 대해 공부하다가 궁금증이 생겼다.
먼저 질문에 답을 해보자면,
- iterator
- iterable 객체를 순회하는 객체
- iter() : iterable 객체로부터 iterator를 생성하는 메소드
- next() : 메소드로 다음 요소를 탐색한다. (__next()__ 를 호출)
- iterable
- 한 번에 하나씩 돌려줄 수 있는 특성
- iterable 한 객체 = 한 번에 하나씩 돌려줄 수 있는 객체라는 뜻 = 순회할 수 있는 객체
- e.g. list, set, tuple, dictionary, string
- 한 번에 하나씩 돌려줄 수 있는 특성
로 정리할 수 있다.
또 중요한 점은 iterator는 항상 iterable 하지만, iterable 한 객체는 무조건 iterator가 되는 것은 아니라는 점이다.
* 순회
자료구조 내부의 요소를 하나씩 인덱싱하는 것을 말한다.
sample_list = [1, 2, 3]
for element in sample_list:
print(element)
위 코드를 보면 쉽게 이해할 수 있다.
반복문을 통해 요소를 불러오는 것을 순회라고 한다.
파이썬 외에도 다른 언어에서도 통용되는 개념이라고 한다.
iterable과 같이 생각해보면
반복문을 사용할 수 있는, sample_list에 들어갈 수 있는 모든 자료구조는 순회가 가능하다.
그렇다면 iterable 한 객체의 예로 들었던 list, set, tuple등 iterable한 객체가 이미 있는데
왜 iterator를 생성하는 것일까?
iterator만이 갖는 특별한 장점이 무엇일까?
lazy evaluation
게으른 연산이 가능하다.
iterable은 메모리에 배열에 크기에 해당하는 공간이 바로 할당된다.
반면 iterator는 생성할 당시에 할당하지 않는다.
이 차이점은 용량이 매우 큰 자료를 사용할 때 두드러진다.
iterator는 필요할 때마다 로딩하기 때문에 메모리를 절약할 수 있어 안정성이 담보된다.
다음은 둘의 차이를 확인하기 쉬운 예시이다.


big_list는 list comprehension, big_gen은 generator comprehension이다.
*generator : iterator를 생성하는 함수
참고 자료
- [Python] Iterable, Iterator 그리고 Generator
'Python' 카테고리의 다른 글
튜플 (Tuple) (0) | 2022.08.26 |
---|