Правильно ли указать следующее:
Если объект Python создан в функции C, но функция не возвращает его, INCREF
не требуется, но DECREF
имеет значение.
[false] Если функция возвращает его, вам нужно INCREF
в функции, которая получает возвращаемое значение. [/ False]
При назначении типизированных переменных C в качестве атрибутов, таких как double
, int
и т. Д., Объекту Python не требуется INCREF
или DECREF
.
Назначение объектов Python в качестве атрибутов другим объектам Python выглядит следующим образом:
PyObject *foo;
foo = bar // A Python object
tmp = self->foo;
Py_INCREF(foo);
self->foo = foo;
Py_XDECREF(tmp);
//taken from the manual, but it is unclear if this works in every situation
РЕДАКТИРОВАТЬ: -> я могу безопасно использовать это в любой ситуации? (не столкнулся с тем, где у меня возникли проблемы)
- dealloc объекта Python должен
DECREF
для каждого другого объекта Python, который он имеет в качестве атрибута, но не для атрибутов типа C.
Редактировать
Под «типом C в качестве атрибута» я имею в виду bar и baz:
typedef struct {
PyObject_HEAD
PyObject *foo;
int bar;
double baz;
} FooBarBaz;