陈述以下内容是否正确:
如果在 C 函数中创建了 Python 对象,但该函数没有返回它,则 no
INCREF
是必需的,但 aDECREF
是。[false]如果函数确实返回了,你确实需要
INCREF
在接收返回值的函数中,[/false]将 C 类型变量作为属性(如
double
等int
)分配给 Python 对象时,不需要INCREF
orDECREF
。以下内容可以安全使用吗?将 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
Python 对象的释放需要
DECREF
对其作为属性的所有其他 Python 对象进行,但对于 C 类型的属性则不需要。
编辑:
关于“C 类型作为属性”,我的意思是 bar 和 baz:
typedef struct {
PyObject_HEAD
PyObject *foo;
int bar;
double baz;
} FooBarBaz;