gpt4 book ai didi

python - 这 PyList_Append(list, Py_BuildValue(...)) 是否泄漏?

转载 作者:IT老高 更新时间:2023-10-28 21:02:21 26 4
gpt4 key购买 nike

这会泄漏吗?:

static PyObject* foo(PyObject* self, PyObject* args){
PyObject* list = PyList_New(0);
for(int i = 0; i < 100; i++)
// leak? does PyList_Append increment ref of the temporary?
PyList_Append(list, Py_BuildValue("i", 42));
return list;
}

不过,无论如何,我认为这样做更好?:

static PyObject* foo(PyObject* self, PyObject* args){
PyObect* list = PyList_New(100);
for(int i = 0; i < 100; i++)
PyList_SetItem(list, i, Py_BuildValue("i", 42));
return list;
}

最佳答案

PyList_Append 确实增加了引用计数器,所以,是的,第一个示例会泄漏。 PyList_SetItem 没有,这使它成为一个奇怪的异常。

第二个选项会稍微高效一些,因为列表将被分配到非常合适的大小,而 Python 确实必须在添加项目时动态调整它的大小。

关于python - 这 PyList_Append(list, Py_BuildValue(...)) 是否泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com