Функции Python C-API, которые занимают и украдут ссылки

Стандартным соглашением в C-API Python является то, что

  • функции не крадут ссылки на входные аргументы (объекты)

  • возвращаемые значения и выходные аргументы (объекты) имеют ссылку

Большинство функций в C-API Python следуют этому соглашению. Однако есть некоторые исключения. Я натолкнулся на следующее:

Функции, которые украдут ссылку из входного аргумента

PyModule_AddObject 

Функции с возвращаемыми значениями или выходными аргументами, которые берут ссылку

 PyErr_Occurred PyTuple_GetItem PyTuple_GETITEM PyDict_GetItem PyDict_GetItemString PyDict_Next 

Есть ли полный список таких функций в любом месте? Такой список будет полезной ссылкой при написании модулей расширения Python.

Текстовый поиск в документах Python 2.7.2 C-API для слов «украсть» и «заимствовать» дал следующие списки:

Функции, которые украдут ссылку из входного аргумента

 PyCell_SET (but not PyCell_Set) PyList_SetItem, PyList_SET_ITEM PyModule_AddObject PyTuple_SetItem, PyTuple_SET_ITEM 

Функции с возвращаемыми значениями или выходными аргументами, которые берут ссылку

 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 

Этот поток на Python-Dev настоятельно предполагает, что такого списка не существует. В этой теме также обсуждается, что с этим делать.