TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.4K subscribers
Post #7803 2.29K
Какой тип данных для иммутабельных структур самый быстрый в Python

NamedTuple, dataclass, attrs, msgspec — все решают одну задачу, но с очень разной стоимостью при старте программы. Автор сделал детальный бенчмарк. Вот что получилось.


📊 Три уровня производительности (warm start)

Быстрые (~7-12 µs на тип):
— native slots — просто __slots__
— msgspec.Struct — сериализация + struct в одном
— record-type (C) — прототип C-расширения

Средние (~76-96 µs, в ~8 раз медленнее):
— NamedTuple — то что большинство использует по умолчанию
— record-type — декоратор от Brett Cannon

Медленные (~200-370 µs, в ~20-30 раз медленнее):
— dataclass, frozen dataclass
— attrs


🔍 Почему такая разница

Всё упирается в количество методов которые генерируются при создании типа:

— native slots и C-расширения: ничего не генерируют → быстро
— NamedTuple: генерирует один __new__ через eval → средне
— dataclass: генерирует __init__, __repr__, __eq__ за один раз, frozen добавляет ещё три → медленно


💾 Память на экземпляр


native slots → 64 байта
NamedTuple → 88 байт (tuple overhead)
msgspec → 64 байта
attrs → 80 байт
dataclass → 64 байта


frozen=True не меняет размер в памяти — это только флаг на уровне записи, не структуры.


Время создания экземпляра


msgspec → ~62 ns
native → ~87 ns
NamedTuple → ~138 ns
attrs → ~209 ns
frozen dc → ~224 ns


Если пишете CLI или инструменты где важен startup time — NamedTuple не такой «бесплатный» как кажется. msgspec быстрее после ~229 типов (warm) но тянет за собой 19ms импорта. Для большинства проектов NamedTuple всё ещё разумный выбор — но теперь вы знаете цену.

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст
  • 👍 5
  • ❤ 1
  • 👏 1
More from @pyproglib
  1. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  2. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  3. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  4. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  5. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  6. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →