Python C API логические объекты

Я использую Python C API 2.7.2 с моим консольным приложением C ++. Существует одно сомнение в отношении булевых объектов Python C API

Я использую:

PyObject* myVariable = Py_True;

Нужно ли уважать myVariable с Py_DECREF(myVariable)?

Документация Python C API гласит:

Истинный объект Python. У этого объекта нет методов. Это должно быть
обрабатывается так же, как и любой другой объект в отношении количества ссылок.

Я искал вопросы, но не мог найти четкого ответа на него.

Благодарю.

0

Решение

Он должен рассматриваться как любой другой объект в отношении количества ссылок.

Это означает, что вы должен увеличить его, когда вы берете его ссылку

{
Py_INCREF(Py_True);
PyObject* myVariable = Py_True;

и ты должен Decf, когда вы избавляетесь от него.

  Py_DECREF(myVariable);
}
2

Другие решения

Хотя он не создается динамически, он должен быть подсчитан, поскольку переменные PyObject могут содержать ЛЮБОЙ объект Python. В противном случае потребуется проверка Py_True и других особых случаев, разбросанных по среде исполнения Python, а также любого кода C / C ++, использующего API. Это было бы грязно и подвержено ошибкам.

0

По вопросам рекламы [email protected]