Python C API 布尔对象

Python C API Boolean Objects

我在我的 C++ 控制台应用程序中使用 Python C API 2.7.2。关于 Python C API Boolean Objects

有一个疑问

我正在使用:

PyObject* myVariable = Py_True;

我需要用 Py_DECREF(myVariable) 引用 myVariable 吗?

Python C API 文档说:-

The Python True object. This object has no methods. It needs to be treated just like any other object with respect to reference counts.

我搜索了这些问题,但找不到明确的答案。

谢谢。

It needs to be treated just like any other object with respect to reference counts.

这意味着您必须在引用它时增加它

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

并且您必须在处理它时减少它的引用。

  Py_DECREF(myVariable);
}

虽然它不是动态创建的,但它必须是引用计数的,因为 PyObject 变量可以保存任何 Python 对象。否则将需要检查 Py_True 和分散在 Python 运行时的其他特殊情况以及任何使用 API 的 C/C++ 代码。那将是混乱且容易出错的。