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
ためのドキュメントは、特にリストに何が起こるかを言及: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
は交換が辞書のためにどのように処理されるかと言います。