Выделение объектов на куче¶
-
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()
, а также инициализирует информацию о длине для объекта переменного размера.
-
PyObject_New(TYPE, typeobj)¶
Выделите новый объект Python, используя тип структуры C TYPE и объект типа Python typeobj (
PyTypeObject*
). Поля, не определенные в заголовке объекта Python, не инициализируются. Вызывающая сторона будет владеть единственной ссылкой на объект (т.е. количество ссылок будет равно единице). Размер выделяемой памяти определяется по полюtp_basicsize
объекта type.
-
PyObject_NewVar(TYPE, typeobj, size)¶
Выделите новый объект Python, используя тип структуры C TYPE и объект типа Python typeobj (
PyTypeObject*
). Поля, не определенные заголовком объекта Python, не инициализируются. Выделенная память позволяет разместить структуру TYPE плюс поля size (Py_ssize_t
) размером, заданным полемtp_itemsize
в typeobj. Это полезно для реализации объектов типа кортежей, которые могут определять свой размер во время конструирования. Встраивание массива полей в одно распределение уменьшает количество распределений, повышая эффективность управления памятью.
-
void PyObject_Del(void *op)¶
Освобождает память, выделенную объекту с помощью
PyObject_New
илиPyObject_NewVar
. Обычно это вызывается из обработчикаtp_dealloc
, указанного в типе объекта. После этого вызова нельзя обращаться к полям объекта, так как память больше не является действительным объектом Python.
-
PyObject _Py_NoneStruct¶
Объект, который в Python отображается как
None
. Доступ к нему должен осуществляться только с помощью макросаPy_None
, который оценивает указатель на этот объект.
См.также
PyModule_Create()
Выделение и создание модулей расширения.