Joh*_*åde 12 python reference-counting python-c-api
Python C-API中的标准约定是
函数不会从输入参数(即对象)中窃取引用
返回值和输出参数(即对象)拥有引用
Python C-API中的大多数函数都遵循此约定.但是,也有一些例外.我遇到过以下情况:
从输入参数中窃取引用的函数
PyModule_AddObject
Run Code Online (Sandbox Code Playgroud)
具有返回值的函数或借用引用的输出参数
PyErr_Occurred
PyTuple_GetItem
PyTuple_GETITEM
PyDict_GetItem
PyDict_GetItemString
PyDict_Next
Run Code Online (Sandbox Code Playgroud)
在任何地方都有这样的功能的完整列表吗?编写Python扩展模块时,这样的列表将是一个有用的参考.
Python 2.7.2 C-API文档中的单词"steal"和"borrow"的文本搜索给出了以下列表:
从输入参数中窃取引用的函数
PyCell_SET (but not PyCell_Set)
PyList_SetItem, PyList_SET_ITEM
PyModule_AddObject
PyTuple_SetItem, PyTuple_SET_ITEM
Run Code Online (Sandbox Code Playgroud)
具有返回值的函数或借用引用的输出参数
all PyArg_Xxx functions
PyCell_GET (but not PyCell_Get)
PyDict_GetItem
PyDict_GetItemString
PyDict_Next
PyErr_Occurred
PyEval_GetBuiltins
PyEval_GetFrame
PyEval_GetGlobals
PyEval_GetLocals
PyFile_Name
PyFunction_GetClosure
PyFunction_GetCode
PyFunction_GetDefaults
PyFunction_GetGlobals
PyFunction_GetModule
PyImport_AddModule
PyImport_GetModuleDict
PyList_GetItem, PyList_GETITEM
PyMethod_Class, PyMethod_GET_CLASS
PyMethod_Function, PyMethod_GET_FUNCTION
PyMethod_Self, PyMethod_GET_SELF
PyModule_GetDict
PyObject_Init
PyObject_InitVar
PySequence_Fast_GET_ITEM
PySys_GetObject
PyThreadState_GetDict
PyTuple_GetItem, PyTuple_GET_ITEM
PyWeakref_GetObject, PyWeakref_GET_OBJECT
Py_InitModule
Py_InitModule3
Py_InitModule4
Run Code Online (Sandbox Code Playgroud)