collections входит в стандартную библиотеку Python и содержит набор готовых контейнеров с дополнительным поведением:
упрощают решение распространённых задач (подсчёт частот, очереди, объединённые словари, структурированные записи);
часто работают эффективнее и/или делают код короче и понятнее, чем «голые» списки и словари.
В backend‑коде это один из самых полезных и востребованных модулей стандартной библиотеки.
Часто используемые классы из collections
namedtuple — кортеж с именованными полями
Фабрика для создания подклассов tuple с доступом по имени полей и по индексу.
from collections import namedtuple
User = namedtuple("User", ["id", "name"])
u = User(id=1, name="Ann")
u.id # 1
u # 1Где применяют: лёгкие неизменяемые «DTO»‑объекты, результаты запросов, координаты, конфиги.
deque — двусторонняя очередь
Списокоподобная структура с быстрыми вставками и удалениями с обеих сторон (append, appendleft, pop, popleft).
from collections import deque
q = deque()
q.append(1)
q.appendleft(0)
q.pop() # 1
q.popleft() # 0Где применяют: очереди задач, буферы последних N элементов (с maxlen), реализации алгоритмов (BFS, скользящее окно).
Counter — счётчик объектов
Подкласс dict, который считает количество вхождений каждого элемента.
from collections import Counter
counts = Counter("banana")
# Counter({'a': 3, 'n': 2, 'b': 1})
counts.most_common(1) # [('a', 3)]Где применяют: статистика, анализ логов, подсчёт частоты значений в списках/строках.
defaultdict — словарь с значением по умолчанию
Подкласс dict, который при обращении к отсутствующему ключу автоматом создаёт для него начальное значение с помощью фабрики (например, list или int).
from collections import defaultdict
groups = defaultdict(list)
groups["admin"].append("user1")
groups["admin"].append("user2")
# {'admin': ['user1', 'user2']}Где применяют: группировка по ключам, удобное построение «словаря списков» или «словаря счётчиков» без лишних проверок if key not in dict.
OrderedDict — словарь с запоминаемым порядком
Словарь, который помнит порядок добавления элементов. Начиная с Python 3.7, обычный dict тоже сохраняет порядок, поэтому OrderedDict нужен реже (например, для специфических операций перестановки ключей).
Другие классы, которые стоит хотя бы знать по названию
ChainMap — единое «представление» нескольких словарей, ведёт себя как один словарь.
UserDict, UserList, UserString — обёртки вокруг dict/list/str для удобного наследования и переопределения поведения.
Как ответить на собеседовании
collections — модуль стандартной библиотеки с специализированными контейнерами, которые дополняют обычные list/dict/tuple. На практике чаще всего используют namedtuple для удобных неизменяемых структур с полями по имени, deque для очередей с быстрыми вставками с обоих концов, Counter для подсчёта частот и defaultdict для словарей с значениями по умолчанию. Реже — OrderedDict, ChainMap и обёртки вроде UserDict.