TGViewer
Zen of Python Zen of Python @zen_of_python · 18.9K subscribers
Post #4997 731
Почему миллион чисел в Python занимает 35 МБ

Список из миллиона целых, которые помещаются в 64 бита, занимает в CPython около 35 МБ вместо ожидаемых 8 МБ. Из них 8 МБ уходят на указатели списка, ещё 28 МБ на числа: небольшой объект int весит 28 байт.

В CPython каждое число является объектом. Кроме значения, у него есть счётчик ссылок и указатель на тип. На 64-битной системе эти служебные поля добавляют минимум 16 байт к каждому объекту. Явное лучше неявного, особенно в профиле памяти.

Массив NumPy с типом uint64 хранит значения вместо ссылок на отдельные объекты Python. Поэтому миллион элементов занимает 8 МБ плюс память на импорт библиотеки. В разборе структуры объектов CPython есть замеры и код. Для больших числовых наборов проверьте NumPy до того, как 8 ГБ превратятся в 35 ГБ.
More from @zen_of_python
  1. Sep 20, 2026Как collections.deque хранит элементы блоками У deque два конца, поэтому легко представить…
  2. Sep 20, 2026Что ускоряет django-msgspec в Django и где он расходится с json django-msgspec заменяет ко…
  3. Sep 19, 2026Как перевести Python-сервер MCP с FastMCP на SDK 2.x Свежая установка зависимостей сломала…
  4. Sep 19, 2026Как кэшировать методы чужого Python-клиента Если библиотечный клиент нельзя менять, его ме…
  5. Sep 19, 2026Где заканчивается ускорение NumPy и что выбрать дальше Векторизация выполняет цикл низкоур…
  6. Sep 18, 2026Как подключать pytest-фикстуры без лишних аргументов теста Иногда фикстура нужна только ра…
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 →