从C扩展cod中释放python列表

2024-06-02 05:39:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一些代码可以创建一个python列表,然后将数据项附加到其中。我们关心的是,如果其中一个数据项是空的,那么我们会认为整个列表(即之前添加的任何项)都没有价值,我们希望释放该列表及其内存。我需要做些什么来确保垃圾回收器释放所有内存?

当前代码为:

PyObject* retval = PyList_New(0);

QList<QVariant> varList = value.toList();
foreach(QVariant var, varList)
{
    // variantToPython(var) returns either NULL
    // or a valid object whose reference count is 1
    PyObject *pyVar = variantToPython(var);
    if (pyVar)
    {
        PyList_append(retval, pyVar);
        Py_DECREF(pyVar);
    }
}

return retval;

但我们想做的是:

^{pr2}$

那么list对象上的DECREF是否足以确保GC释放所有内容?


Tags: 内存代码列表varpyobject价值retvalpylist