Документация Python неофициальный перевод

Выделение объектов в кучеAllocating Objects on the Heap

PyObject* _PyObject_New(PyTypeObject *type)
Возвращаемое значение: новая ссылка.
PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Возвращаемое значение: новая ссылка.
PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)
Возвращаемое значение: заимствованная ссылка.

Инициализирует только что выделенный объект op, устанавливая его тип и начальную ссылку. Возвращает инициализированный объект. Если type указывает, что объект участвует в детекторе циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Остальные поля объекта не затрагиваются.

PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Возвращаемое значение: заимствованная ссылка.

Эта функция делает всё то же, что и PyObject_Init(), а также инициализирует информацию о длине для объекта переменного размера.

TYPE* PyObject_New(TYPE, PyTypeObject *type)
Возвращаемое значение: новая ссылка.

Выделяет новый объект Python с помощью типа структуры C TYPE и объекта типа Python type. Поля, не определённые заголовком объекта Python, не инициализируются; счётчик ссылок объекта будет равен единице. Размер выделяемой памяти определяется из поля tp_basicsize объекта типа.

TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
Возвращаемое значение: новая ссылка.

Выделяет новый объект Python с помощью C-структуры TYPE и объекта типа Python type. Поля, не определённые заголовком объекта Python, не инициализируются. Выделенная память рассчитана на структуру TYPE плюс size полей размером, задаваемым полем tp_itemsize из type. Это удобно для реализации таких объектов, как кортежи, которые могут определять свой размер во время создания. Встраивание массива полей в ту же область выделения уменьшает число выделений, повышая эффективность управления памятью.

void PyObject_Del(void *op)

Освобождает память, выделенную объекту с помощью PyObject_New() или PyObject_NewVar(). Обычно вызывается из tp_dealloc обработчика, указанного в типе объекта. После этого вызова поля объекта не должны использоваться, так как память больше не является допустимым объектом Python.

PyObject _Py_NoneStruct

Объект, который виден в Python как None. Доступ к нему следует получать только через макрос Py_None, который вычисляет указатель на этот объект.

См. также

PyModule_Create()

Для выделения памяти и создания модулей расширений.