Размещение объектов в куче

PyObject* _PyObject_New(PyTypeObject *type)
Return value: New reference.
PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Return value: New reference.
PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)
Return value: Borrowed reference.

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

PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Return value: Borrowed reference.

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

TYPE* PyObject_New(TYPE, PyTypeObject *type)
Return value: New reference.

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

TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
Return value: New reference.

Выделить новый объект 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()
Выделить и создать модули расширения.