TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5026 624
Как битовые множества сокращают память моделей Pydantic

Explicit is better than implicit, но хранить набор явно переданных полей в полноценном Python set оказалось накладно. Memray показал: создание model_fields_set заняло почти 800 МБ на миллионе экземпляров модели с семью полями.

Поскольку поля модели упорядочены, каждому можно назначить номер бита: 1 означает, что значение передали при создании, 0 — что использовано значение по умолчанию. Имена дополнительных полей, которых нет в схеме, остаются в отдельном set.

В разборе реализации показано, как выбирать u8, u16 или вектор для моделей разного размера. На тесте с небольшими значениями замена сократила память на 55%. Полезный пример того, почему профилировать стоит не только __dict__, но и служебные структуры каждого экземпляра.
  • ☃ 1
More from @zen_of_python
  1. Sep 29, 2026Как проверять плагины через контракт Pydantic и FastAPI Сервис может отвечать по нужным ад…
  2. Sep 29, 2026Как OpenBLAS ускоряет NumPy в браузере Раньше браузерная сборка NumPy выполняла np.matmul…
  3. Sep 28, 2026partial или lambda: как специализировать колбэк без сюрпризов functools.partial заранее св…
  4. Sep 28, 2026Как коллизии превращают построение set в Python в квадратичную задачу Привычное O(1) для s…
  5. Sep 28, 2026Как проверять инварианты Python-кода с Hypothesis Обычный тест фиксирует конкретный ввод и…
  6. Sep 27, 2026Как запускать собственный SQL через миграции Django У models.Index нашлось необычное приме…
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 →