说明以下内容是正确的:
如果在C函数中创建了Python对象,但该函数没有返回它,INCREF则不需要,但是a 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
Run Code Online (Sandbox Code Playgroud)编辑: - >我可以在任何情况下安全地使用它吗?(没有碰到一个导致我问题的地方)
DECREF用于其作为属性的每个其他Python对象,但不适用于C类型的属性.编辑
'C type as a attribute'是指bar和baz:
typedef struct {
PyObject_HEAD
PyObject *foo;
int bar;
double baz;
} FooBarBaz;
Run Code Online (Sandbox Code Playgroud)