В традиционной GIL-сборке CPython базовый заголовок содержит счётчик ссылок ob_refcnt и указатель типа ob_type; на обычной 64-битной платформе это суммарно 16 байт. Но это не весь размер объекта.
Опишите устройство структуры данных PyObject в C. Какие два обязательных поля присутствуют абсолютно в каждом объекте Python, даже в обычном числе, и сколько байт они занимают в 64-битной системе?
В традиционной 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.