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
- это в основном быстрый Хак.