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.name # "Ann"
Применение: лёгкие неизменяемые "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/UserList/UserString.