Setitem класса PyList и setitem класса PyList
Из того, что я могу сказать, разница между PyList_SetItem и PyList_SETITEM заключается в том, что PyList_SetItem снизит количество ссылок на элемент списка, который он перезаписывает, а PyList_SETITEM-нет.
Есть ли какая-то причина, почему я не должен просто использовать PyList_SetItem все время? Или у меня были бы проблемы, если бы я использовал PyList_SetItem для инициализации позиции индекса в списке?
1 ответ:
PyList_SET_ITEMэто небезопасный макрос, который в основном вставляет объект во внутренний массив указателей списка без каких-либо связанных проверок. Если что-либо неNULLнаходится вi- й позиции списка, произойдет утечка ссылок.PyList_SET_ITEMпохищает ссылку на объект, помещенный в список.PyList_SetItemтакже крадет ссылку, но он проверяет границы и уменьшает все, что может находиться вi- й позиции. Эмпирическое правило-использоватьPyList_SET_ITEMдля инициализации только что созданных списков иPyList_SetItemв противном случае. Это также полностью безопасно использоватьPyList_SetItemвезде;PyList_SET_ITEM- это в основном быстрый Хак.