我想知道如何在PyDict中的現有字段(C擴展名內)中設置新值時內存管理/引用計數的工作原理。使用PyDict_SetItemString引用計數
例如,假設創建一個字典和填充以下列方式:
myPyDict = PyDict_New();
tempPyObj = PyString_FromString("Original Value");
PyDict_SetItemString(myPyDict,"fieldname",tempPyObj);
Py_DECREF(tempPyObj);
從內存和引用計數的角度來看,會發生什麼時,有一個後續
tempPyObj = PyString_FromString("New Value");
PyDict_SetItemString(myPyDict,"fieldname",tempPyObj);
Py_DECREF(tempPyObj);
是的原始值的引用計數自動遞減(並且內存自動釋放)?
爲PyList_SetItem
doc文件特別提到了名單會發生什麼:This function 「steals」 a reference to item and discards a reference to an item already in the list at the affected position.
但無論PyDic_SetItem
也不PyDict_SetItemString
說,更換爲如何處理字典。