제목
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- Python 중급 개발자
__iter__()
/__next__()
메서드 이해를 원하는 학습자itertools
모듈 사용법을 탐구하는 개발자
핵심 요약
iter()
및__iter__()
메서드로 이터레이터 생성 가능 (리스트, 튜플, 딕셔너리 등 모든 반복 가능한 객체에 적용)- 제너레이터와 제너레이터 컴프리헨션을 통해 이터레이터 생성 (
yield
/yield from
사용) itertools
모듈 활용 (repeat()
,pairwise()
,combinations()
등)deepcopy()
사용 권장 (이터레이터 복사 시 안전성 확보)
섹션별 세부 요약
1. 이터레이터 생성 방법
iter()
함수 또는 객체의__iter__()
메서드로 이터레이터 생성 가능- 예:
v2 = iter(v1)
,v2 = v1.__iter__()
- 리스트, 튜플, 세트, 딕셔너리, 문자열 등 모든 반복 가능한 객체에서 동작
- 딕셔너리의 경우
keys()
,values()
,items()
메서드로 이터레이터 생성 가능
2. 제너레이터와 이터레이터 생성
yield
키워드로 제너레이터 함수 정의 (예:def func(): yield 'a'
)- 제너레이터 컴프리헨션 사용 (예:
gen = (x.upper() for x in ['a', 'b', 'c', 'd'])
) - 제너레이터는
generator
객체로 생성되며next()
로 요소 접근 가능
3. `itertools` 모듈 활용
repeat(object, times)
로 반복 요소 생성 (예:repeat('Hello', 3)
)pairwise(iterable)
로 인접 요소 쌍 생성 (예:pairwise('ABCD')
→ ('A','B'), ('B','C'), ...)combinations(iterable, r)
로 조합 생성 (예:combinations('ABC', 2)
→ ('A','B'), ('A','C'), ...)
4. 이터레이터 복사 및 동일성 확인
copy()
는 얕은 복사,deepcopy()
는 깊은 복사 수행v1 is v2
로 이터레이터 동일성 확인 (예:v2 = v1
→True
,v2 = deepcopy(v1)
→False
)next()
호출 시 동일한 이터레이터는 순차적으로 요소 접근
5. 이터레이터 사용 시 주의 사항
copy()
는 이터레이터 복사에 불안전 (이터레이터가 동일한 객체를 참조)deepcopy()
사용 권장 (이터레이터 복사 시 안전)- 이터레이터는 반복 시 한 번만 사용 가능 (예:
StopIteration
발생 시 재사용 불가)
결론
- 이터레이터 생성 시
deepcopy()
사용 권장 (안전성 확보),itertools
모듈 활용으로 효율성 향상 - 제너레이터와
__iter__()
/__next__()
메서드를 통해 메모리 효율적인 반복 구현 - 이터레이터 복사 시
is
연산자로 동일성 확인,StopIteration
예외 처리 필수