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

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

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

Изменено в версии 2.5: Эта функция использовала тип int для size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.

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

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

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

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

Изменено в версии 2.5: Эта функция использовала тип int для size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.

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. Это полезно для реализации таких объектов, как кортежи, которые могут определить свой размер во время создания. Встраивание массива полей в одно выделение уменьшает количество выделений, повышая эффективность управления памятью.

Изменено в версии 2.5: Эта функция использовала тип int для size. Это может потребовать изменений в коде для корректной поддержки 64-битных систем.

void PyObject_Del(PyObject *op)
Освобождает память, выделенную объекту с помощью PyObject_New() или PyObject_NewVar(). Обычно вызывается из обработчика tp_dealloc, указанного в типе объекта. После этого вызова поля объекта не следует использовать, так как память больше не является допустимым объектом Python.
PyObject* Py_InitModule(char *name, PyMethodDef *methods)
Возвращаемое значение: заимствованная ссылка.

Создаёт новый объект модуля на основе имени и таблицы функций, возвращая новый объект модуля.

Изменено в версии 2.3: Более старые версии Python не поддерживали NULL в качестве значения для аргумента methods.

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

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

Изменено в версии 2.3: Более старые версии Python не поддерживали NULL в качестве значения для аргумента methods.

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

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

Примечание

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

Изменено в версии 2.3: Более старые версии Python не поддерживали NULL в качестве значения для аргумента methods.

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