Выделение объектов в куче¶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_NoneStruct¶
Объект, который в Python виден как None. Доступ к нему следует получать только с помощью макроса Py_None, который вычисляет указатель на этот объект.
См. также
- PyModule_Create()
- Для выделения памяти и создания модулей расширений.