相关疑难解决方法(0)

Py_INCREF/DECREF:何时

说明以下内容是正确的:

  • 如果在C函数中创建了Python对象,但该函数没有返回它,INCREF则不需要,但是a DECREF.

  • [false]如果函数确实返回了它,你需要INCREF在接收返回值的函数中.[/ false]

  • 当分配了C类型的变量作为属性,如double,int等等,给Python对象,没有INCREFDECREF需要.

  • 将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)

编辑: - >我可以在任何情况下安全地使用它吗?(没有碰到一个导致我问题的地方)

  • Python对象的dealloc需要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)

python python-c-api

36
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×1

python-c-api ×1