| 클래스 | 핵심 목적 | 주요 특징/ 사용 예시 |
| namedtuple | 튜플의 필드에 이름 부여 | 불변(immutable) 구조, 클래스처럼 필드 접근 |
| deque | 양쪽에서 빠른 삽입/삭제 | 스택·큐·슬라이딩 윈도우 구현에 최적 |
| Counter | 요소 개수 세기 | 리스트/문자열의 빈도 분석 |
| defaultdict | 기본값을 갖는 딕셔너리 | 존재하지 않는 키 접근 시 자동 초기화 |
| OrderedDict | 순서가 유지되는 딕셔너리 | LRU Cache 등 순서 기반 로직 구현 |
| ChainMap | 여러 딕셔너리를 묶어 하나처럼 다룸 | 다중 스코프 환경에서 키 검색 |
| UserDict, UserList, UserString | 커스텀 자료형 구현용 Wrapper | 상속/오버라이드로 사용자 정의 자료구조 만들 때 |
1. namedtuple
튜플은 순서로만 접근한다.
하지만 필드 이름으로 접근하면 코드 가독성이 훨씬 좋아진다.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y) # 10 20
✅ 메모리 효율 높음
✅ 클래스보다 가볍고 빠름
✅ 불변(immutable)
2. deque — 양방향 큐 (Double-ended Queue)
리스트는 중간 삽입/삭제가 느리지만,
deque는 양쪽 끝 삽입/삭제가 모두 O(1) 이다.
from collections import deque
dq = deque([1, 2, 3])
dq.append(4) # 오른쪽 삽입
dq.appendleft(0) # 왼쪽 삽입
dq.pop() # 오른쪽 삭제
dq.popleft() # 왼쪽 삭제
✅ 큐, 스택, 슬라이딩 윈도우 등에 활용
✅ 내부적으로 양방향 링크드리스트 기반
3. Counter — 항목의 빈도(개수) 계산
from collections import Counter
cnt = Counter("banana")
print(cnt) # Counter({'a': 3, 'n': 2, 'b': 1})
print(cnt.most_common(2)) # [('a', 3), ('n', 2)]
✅ 문자열, 리스트, 로그 등 빈도 분석에 강력
✅ 덧셈/뺄셈 연산도 가능
a = Counter("hello")
b = Counter("world")
print(a + b) # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})
4. defaultdict — 기본값이 있는 딕셔너리
from collections import defaultdict
d = defaultdict(int) # 기본값 0
d['apple'] += 1
print(d) # defaultdict(<class 'int'>, {'apple': 1})
✅ 키가 없을 때 자동 초기화 (KeyError 없음)
✅ 기본값 타입은 int, list, set 등 지정 가능
words = ['apple', 'banana', 'apple']
group = defaultdict(list)
for w in words:
group[w[0]].append(w)
# {'a': ['apple', 'apple'], 'b': ['banana']}
5. OrderedDict — 순서를 기억하는 딕셔너리
파이썬 3.7 이상부터 기본 dict도 순서를 유지하지만,
OrderedDict는 순서 조작 메서드(move_to_end 등) 이 추가로 제공된다.
from collections import OrderedDict
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od.move_to_end('a') # a를 맨 뒤로
print(od) # OrderedDict([('b', 2), ('a', 1)])
✅ LRU Cache 구현 시 자주 사용됨
6. ChainMap — 여러 딕셔너리 묶기
from collections import ChainMap
defaults = {'theme': 'light', 'lang': 'en'}
user = {'lang': 'ko'}
config = ChainMap(user, defaults)
print(config['lang']) # ko (user 우선)
print(config['theme']) # light (defaults에서 가져옴)
✅ 여러 설정 파일, 환경 변수 계층 구조 관리에 유용
✅ 조회 시 앞쪽 딕셔너리부터 탐색
7. UserDict, UserList, UserString — 사용자 정의 확장
from collections import UserDict
class MyDict(UserDict):
def __getitem__(self, key):
print(f"Accessing {key}")
return super().__getitem__(key)
d = MyDict({'a': 1})
print(d['a'])
✅ 커스텀 자료형 제작 시 안전하고 직관적
'공부 > 자료구조,알고리즘_python' 카테고리의 다른 글
| bisect 이진탐색 모듈 (0) | 2025.10.23 |
|---|---|
| [순차탐색] in 연산자 시간복잡도 비교 (0) | 2025.10.23 |
| 2. collections 활용 패턴 (0) | 2025.10.22 |