Выделение объектов в куче¶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)¶ - Возвращаемое значение: заимствованная ссылка. Часть Stable ABI.
Инициализирует только что выделенный объект op его типом и начальной ссылкой. Возвращает инициализированный объект. Если type указывает, что объект участвует в детекторе циклического мусора, он добавляется в набор наблюдаемых объектов детектора. Остальные поля объекта не затрагиваются.
-
PyVarObject *
PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶ - Возвращаемое значение: заимствованная ссылка. Часть Stable 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()Для выделения памяти и создания модулей расширений.