collections — 컨테이너 데이터 타입
collections — 컨테이너 데이터 타입
(소스: Lib/collections/init.py)
이 모듈은 파이썬의 범용 내장 컨테이너인 dict, list, set, tuple의 대안이 되는 특수 컨테이너 데이터 타입을 구현해요.
| 이름 | 설명 |
|---|---|
namedtuple() |
명명된 필드를 가진 tuple 서브클래스를 만드는 팩토리 함수 |
deque |
양 끝에서 빠른 추가·팝이 가능한 list 같은 컨테이너 |
ChainMap |
여러 매핑의 단일 뷰를 만드는 dict 같은 클래스 |
Counter |
hashable 객체를 세기 위한 dict 서브클래스 |
OrderedDict |
항목이 추가된 순서를 기억하는 dict 서브클래스 |
defaultdict |
누락된 값에 대해 팩토리 함수를 호출하는 dict 서브클래스 |
UserDict |
dict 서브클래스화를 더 쉽게 하는 사전 객체 래퍼 |
UserList |
list 서브클래스화를 더 쉽게 하는 리스트 객체 래퍼 |
UserString |
string 서브클래스화를 더 쉽게 하는 문자열 객체 래퍼 |
본문
ChainMap 객체
(3.3 추가) ChainMap 클래스는 여러 매핑을 빠르게 하나의 단위처럼 연결하기 위해 제공돼요. 새 사전을 만들고 여러 update() 호출을 실행하는 것보다 훨씬 빠른 경우가 많아요. 이 클래스는 중첩 스코프를 시뮬레이션하고 템플릿에 유용해요.
class collections.ChainMap(*maps): 여러 dict나 다른 매핑을 그룹화해 단일의 업데이트 가능한 뷰를 만들어요. maps가 지정되지 않으면 빈 사전 하나가 제공되어 새 체인이 항상 최소 하나의 매핑을 갖게 해요. 기반 매핑들은 리스트에 저장되고, 그 리스트는 public이라maps속성으로 접근·업데이트할 수 있어요. 조회는 기반 매핑을 차례로 검색하다 키를 찾고, 쓰기·업데이트·삭제는 첫 번째 매핑에만 동작해요.ChainMap은 기반 매핑을 참조로 통합하므로 기반 매핑이 업데이트되면 그 변경이 ChainMap에 반영돼요.maps: 사용자 업데이트 가능한 매핑 리스트. 처음 검색부터 마지막 검색까지 순서. 유일하게 저장된 상태이며 검색되는 매핑을 바꾸기 위해 수정할 수 있어요. 최소 하나의 매핑을 항상 포함해야 해요.new_child(m=None): 기존 인스턴스의 앞에 m(기본 빈 dict)을 더한 새 ChainMap을 반환 (중첩 컨텍스트 시뮬레이션).parents: 첫 번째 매핑을 제외한 모두를 포함하는 새 ChainMap을 반환하는 속성.map[1:]과 동등 (바깥 스코프 접근).
ChainMap 예제와 레시피
다음 사용법은 기본 사전처럼 동작하지만 우선순위가 있는 체인을 보여주는 예시예요.
import collections
baseline = {'music': 'bach', 'art': 'rembrandt'}
adjustments = {'art': 'van gogh'}
print(list(collections.ChainMap(adjustments, baseline)))
# ['music', 'art']
Counter 객체
Counter는 hashable 객체를 세기 위한 dict 서브클래스예요. 요소를 사전 키로, 그 개수를 값으로 저장하는 컬렉션이에요. 음수·0 개수도 허용되고, elements(), most_common([n]), subtract(...) 같은 메서드를 제공해요. Counter('abracadabra')처럼 문자열·시퀀스·매핑에서 만들 수 있고, c['missing']은 0을 반환해요.
deque 객체
deque(double-ended queue)는 양 끝에서 빠른 추가·팝이 가능한 list 같은 컨테이너예요. append(), appendleft(), pop(), popleft(), extend(), extendleft(), rotate(), maxlen 등을 지원하고 스레드 안전하며 양 끝에서 O(1) 연산을 보장해요.
defaultdict 객체
defaultdict는 누락된 키에 대해 팩토리 함수를 호출해 기본값을 공급하는 dict 서브클래스예요. default_factory 속성으로 기본값 생성기를 지정하고, __missing__() 메서드로 누락 키를 처리해요. defaultdict(list), defaultdict(int) 같이 써요.
namedtuple() 팩토리 함수
명명된 필드를 가진 tuple 서브클래스를 만드는 팩토리 함수예요.
Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)
필드 이름으로 인덱스와 같게 접근할 수 있고, _make(), _asdict(), _replace(), _fields 같은 메서드·속성을 제공해요.
OrderedDict 객체
항목이 추가된 순서를 기억하는 dict 서브클래스예요. move_to_end(key, last=True), popitem(last=True) 메서드를 제공해요.
UserDict / UserList / UserString
내장 타입을 서브클래스화하기 어려운 경우를 위한 래퍼 클래스들이에요. dict, list, str의 동작을 상속받으면서 데이터를 .data 속성에 저장해 더 쉽게 서브클래스화할 수 있어요.