Мне интересно, как работает управление памятью/подсчет ссылок, когда новое значение устанавливается в существующее поле внутри 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
сказать, как замена обрабатывается для словарей.