Розміщення об’єктів у купі

PyObject *_PyObject_New(PyTypeObject *type)
Return value: New reference.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Return value: New reference.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
Return value: Borrowed reference. Part of the Stable ABI.

Ініціалізуйте щойно зарезервований об’єкт op з його типом і початковим посиланням. Повертає ініціалізований об’єкт. Якщо type вказує на те, що об’єкт бере участь у циклічному детекторі сміття, він додається до набору спостережуваних об’єктів детектора. Інші поля об’єкта не зачіпаються.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Return value: Borrowed reference. Part of the Stable ABI.

Це робить все, що робить PyObject_Init(), а також ініціалізує інформацію про довжину для об’єкта змінного розміру.

PyObject_New(TYPE, typeobj)

Allocate a new Python object using the C structure type TYPE and the Python type object typeobj (PyTypeObject*). Fields not defined by the Python object header are not initialized. The caller will own the only reference to the object (i.e. its reference count will be one). The size of the memory allocation is determined from the tp_basicsize field of the type object.

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()

Для розміщення та створення модулів розширення.