Выделение объектов в куче
-
PyObject *_PyObject_New(PyTypeObject *type) - Значение возврата: Новая ссылка.
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size) - Значение возврата: Новая ссылка.
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type) -
Значение возврата: Заимствованная ссылка. Часть Стабильной ABI.
Инициализирует только что выделенный объект op своим типом и начальной ссылкой. Возвращает инициализированный объект. Если type указывает, что объект участвует в детекторе циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Другие поля объекта не затрагиваются.
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size) -
Значение возврата: Заимствованная ссылка. Часть Стабильной ABI.
Выполняет всё, что делает
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() -
Для выделения и создания расширяемых модулей.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/allocation.html