python解释器如何处理对象的负引用计数?
若对象的引用计数为负数,python解释器会释放该对象的内存吗 例如,如果我有这样的代码,python解释器如何处理对象的负引用计数?,python,python-c-api,Python,Python C Api,若对象的引用计数为负数,python解释器会释放该对象的内存吗 例如,如果我有这样的代码,time\u tuple会被python释放吗 PyObject* list = PyList_New(2); PyObject *time_tuple = Py_BuildValue("(s, s)", "Time", "O"); PyList_SetItem(list, 0, time_tuple); Py_XDECREF(time_tuple); Py_XDECREF(list); 如果可以的话,请
time\u tuple
会被python释放吗
PyObject* list = PyList_New(2);
PyObject *time_tuple = Py_BuildValue("(s, s)", "Time", "O");
PyList_SetItem(list, 0, time_tuple);
Py_XDECREF(time_tuple);
Py_XDECREF(list);
如果可以的话,请参考答案中的一些文档。口译员永远不会遇到负引用计数。如果引用计数为零,则表示该对象的引用为零。一旦发生这种情况,对象将被释放 引用Python: 如果引用计数达到零,则调用对象类型的释放函数(该函数不得为NULL) 有关更多信息,请参见 还需要注意的是,在Python中,除了引用计数之外,还需要跟踪谁实际拥有这些引用 在您提供的示例中:
Py\u BuildValue()
返回一个新的引用,该引用随后归您所有并保存在time\u元组中。此时,元组的引用计数为1
PyList\u SetItem()
窃取所有权引用,元组的引用计数仍然为1,但该引用归list
所有Py\u XDECREF(time\u tuple)
将元组的引用计数递减为0,对象被释放。这是一个错误,因为引用属于列表
Py_XDECREF(list)
将列表的引用计数递减为0,列表被释放。对元组的引用归列表所有,因此它会减少其引用计数我理解python引用拥有行为,这就是我编写该示例的原因。有趣的是,我的程序工作正常,没有任何崩溃,我认为负引用计数处理为0引用计数。