Опишите устройство структуры данных PyObject в C. Какие два обязательных поля присутствуют абсолютно в каждом объекте Python, даже в обычном числе, и сколько байт они занимают в 64-битной системе?

В традиционной GIL-сборке CPython базовый заголовок содержит счётчик ссылок ob_refcnt и указатель типа ob_type; на обычной 64-битной платформе это суммарно 16 байт. Но это не весь размер объекта.

Короткий ответ

Что ответить на собеседовании

В традиционной GIL-сборке CPython базовый заголовок содержит счётчик ссылок ob_refcnt и указатель типа ob_type; на обычной 64-битной платформе это суммарно 16 байт. Но это не весь размер объекта.

Подробный разбор

Ответ с пояснениями

В традиционной GIL-сборке CPython базовый заголовок содержит счётчик ссылок ob_refcnt и указатель типа ob_type; на обычной 64-битной платформе это суммарно 16 байт. Но это не весь размер объекта.

Число, строка или список добавляют собственные поля и данные; переменный размер и GC могут иметь дополнительное служебное хранение. Нельзя переносить формулировку «ровно два поля абсолютно везде» на любой Python или любую сборку CPython. В free-threaded-сборке заголовок расширен состоянием владения, синхронизации и подсчёта ссылок. Точное расположение является деталью версии и ABI. sys.getsizeof конкретного int не равно размеру одного лишь PyObject.

Источник: raw.githubusercontent.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее