Setitem класса PyList и setitem класса PyList


Из того, что я могу сказать, разница между PyList_SetItem и PyList_SETITEM заключается в том, что PyList_SetItem снизит количество ссылок на элемент списка, который он перезаписывает, а PyList_SETITEM-нет.

Есть ли какая-то причина, почему я не должен просто использовать PyList_SetItem все время? Или у меня были бы проблемы, если бы я использовал PyList_SetItem для инициализации позиции индекса в списке?

1 7

1 ответ:

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