Интересная новость из Python-мира: на обсуждение вынесен PEP 814, предлагающий добавить в стандартный язык frozendict — неизменяемый словарь как встроенный тип.
Почему это важно?
До сих пор в стандартной библиотеке не было простого и безопасного способа делиться словарями между потоками или агентами без риска гонок данных.
👉 PEP 814 пытается решить именно эту проблему.
Что такое frozendict?
Это иммутабельный словарь, не наследующий
dict, а реализующий интерфейс Mapping.Создаётся привычными способами:
fd = frozendict(a=1, b=2)
fd = frozendict({'a': 1, 'b': 2})
fd = frozendict([('a', 1), ('b', 2)])
Если все значения внутри тоже неизменяемые, то
frozendict становится хэшируемым, значит:✔️ его можно использовать как ключ в словаре
✔️ добавлять в set
✔️ кешировать через
functools.lru_cacheПоддерживаются и объединения:
frozendict(x=1) | frozendict(y=1)
— всегда создаётся новый объект, что исключает побочные эффекты.
Сообщество PEP восприняло идею в целом тепло. Больше всего споров вызвало желание добавить O(1) заморозку словаря — например, через
d.freeze().Но менять тип существующего объекта в рантайме признали слишком рискованным: возможны сюрпризы для других потоков, держащих ссылку на словарь. Поэтому оптимизации отложили «на потом», чтобы не мешать движению самого PEP.
Учитывая актуальность темы для free-threaded Python, шанс принятия выглядит высоким.
🔗 Подробнее
🔹 Курс «Программирование на языке Python»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека питониста
#буст