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 서브클래스화를 더 쉽게 하는 문자열 객체 래퍼

출처: Python documentation

본문

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 속성에 저장해 더 쉽게 서브클래스화할 수 있어요.

더 알아보기 (Learn more)