Python C 模块函数参数引用计数

Posted

技术标签:

【中文标题】Python C 模块函数参数引用计数【英文标题】:Python C module function argument reference counting 【发布时间】:2012-04-11 04:00:41 【问题描述】:

当我有一个从PyArg_ParseTuple 获得的PyObject * 时,我是否需要在从函数返回之前确保Py_DECREF 它?

例子:

static PyObject * modulefunc(PyObject * self, PyObject * args) 
    PyObject * obj;
    if (!PyArg_ParseTuple(args, "O", &obj)) 
        return NULL;
    

    if (!PyObject_TypeCheck(obj, expected_type_ptr)) 
        // Do I need to Py_DECREF(obj) here?
        PyErr_SetString(PyExc_TypeError, "First argument is not expected type.");
        return NULL;
    

    // ... rest of function implementation.

【问题讨论】:

【参考方案1】:

没有。 PyArg_ParseTuple 给你一个borrowed reference。

【讨论】:

以上是关于Python C 模块函数参数引用计数的主要内容,如果未能解决你的问题,请参考以下文章

Python C API 引用计数器

python小小面试题

Python如何进行内存管理?

python是如何进行内存管理的?

Python的内存管理

在 Python 的 C/C++ 扩展中,返回的 PyObject* 应该有多少引用计数?