Документация 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(PyObject *op)
Освобождает память, выделенную объекту с помощью PyObject_New или PyObject_NewVar. Обычно эта функция вызывается из обработчика tp_dealloc, указанного в типе объекта. После этого вызова поля объекта не должны использоваться, так как память больше не является допустимым объектом Python.
PyObject* Py_InitModule(char *name, PyMethodDef *methods)
Возвращаемое значение: заимствованная ссылка.

Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля; аргумент methods может быть NULL, если для модуля не нужно определять методы.

PyObject* Py_InitModule3(char *name, PyMethodDef *methods, char *doc)
Возвращаемое значение: заимствованная ссылка.

Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля. Аргумент methods может быть NULL, если для модуля не нужно определять методы. Если doc не равен NULL, он будет использован для задания строки документации модуля.

PyObject* Py_InitModule4(char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)
Возвращаемое значение: заимствованная ссылка.

Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля. Аргумент methods может быть NULL, если для модуля не нужно определять методы. Если doc не равен NULL, он будет использован для задания строки документации модуля. Если self не равен NULL, он будет передан функциям модуля как их первый параметр (иначе он был бы NULL). (Это было добавлено как экспериментальная возможность, и на текущей версии Python нет известных случаев её использования.) Для apiver единственное значение, которое следует передавать, определяется константой PYTHON_API_VERSION.

Примечание

В большинстве случаев вместо этой функции следует использовать Py_InitModule3; используйте эту только если уверены, что она вам нужна.

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