제목

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • 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 = v1True, v2 = deepcopy(v1)False)
  • next() 호출 시 동일한 이터레이터는 순차적으로 요소 접근

5. 이터레이터 사용 시 주의 사항

  • copy()는 이터레이터 복사에 불안전 (이터레이터가 동일한 객체를 참조)
  • deepcopy() 사용 권장 (이터레이터 복사 시 안전)
  • 이터레이터는 반복 시 한 번만 사용 가능 (예: StopIteration 발생 시 재사용 불가)

결론

  • 이터레이터 생성 시 deepcopy() 사용 권장 (안전성 확보), itertools 모듈 활용으로 효율성 향상
  • 제너레이터와 __iter__()/__next__() 메서드를 통해 메모리 효율적인 반복 구현
  • 이터레이터 복사 시 is 연산자로 동일성 확인, StopIteration 예외 처리 필수