引用計數(shù)?
本節(jié)介紹的宏被用于管理 Python 對象的引用計數(shù)。
-
void Py_INCREF(PyObject *o)?
增加對象 o 的引用計數(shù)。
此函數(shù)通常被用來將 borrowed reference 原地轉(zhuǎn)換為 strong reference。
Py_NewRef()
函數(shù)可被用來創(chuàng)建新的 strong reference。此對象必須不為
NULL
;如果你不能確定它不為NULL
,請使用Py_XINCREF()
。
-
void Py_XINCREF(PyObject *o)?
增加對象 o 的引用計數(shù)。 對象可以為
NULL
,在此情況下該宏不產(chǎn)生任何效果。另請參閱
Py_XNewRef()
。
-
PyObject *Py_NewRef(PyObject *o)?
- Part of the Stable ABI since version 3.10.
新建指向一個對象的 strong reference: 增加對象 o 的引用計數(shù)并返回對象 o。
當(dāng)不再需要這個 strong reference 時,應(yīng)當(dāng)在對象上調(diào)用
Py_DECREF()
來有減少該對象的引用計數(shù)。對象 o 必須不為
NULL
;如果 o 可以為NULL
則應(yīng)改用Py_XNewRef()
。例如:
Py_INCREF(obj); self->attr = obj;
可以寫成:
self->attr = Py_NewRef(obj);
另請參閱
Py_INCREF()
。3.10 新版功能.
-
PyObject *Py_XNewRef(PyObject *o)?
- Part of the Stable ABI since version 3.10.
類似于
Py_NewRef()
,但對象 o 可以為 NULL。如果對象 o 為
NULL
,該函數(shù)也·將返回NULL
。3.10 新版功能.
-
void Py_DECREF(PyObject *o)?
減少對象 o 的引用計數(shù)。
如果引用計數(shù)達(dá)到零,則會發(fā)起調(diào)用對象類型的撤銷分配函數(shù) (該函數(shù)必須不為
NULL
)。此函數(shù)通常被用于在退出作用域之前刪除一個 strong reference。
此對象必須不為
NULL
;如果你不能確定它不為NULL
,請使用Py_XDECREF()
。警告
釋放函數(shù)可導(dǎo)致任意 Python 代碼被發(fā)起調(diào)用(例如當(dāng)一個帶有
__del__()
方法的類實例被釋放時就是如此)。 雖然此類代碼中的異常不會被傳播,但被執(zhí)行的代碼能夠自由訪問所有 Python 全局變量。 這意味著任何可通過全局變量獲取的對象在Py_DECREF()
被發(fā)起調(diào)用之前都應(yīng)當(dāng)處于完好狀態(tài)。 例如,從一個列表中刪除對象的代碼應(yīng)當(dāng)將被刪除對象的引用拷貝到一個臨時變量中,更新列表數(shù)據(jù)結(jié)構(gòu),然后再為臨時變量調(diào)用Py_DECREF()
。
-
void Py_XDECREF(PyObject *o)?
減少對象 o 的引用計數(shù)。 對象可以為
NULL
,在此情況下該宏不產(chǎn)生任何效果;在其他情況下其效果與Py_DECREF()
相同,并會應(yīng)用同樣的警告。
-
void Py_CLEAR(PyObject *o)?
減少對象 o 的引用計數(shù)。 對象可以為
NULL
,在此情況下該宏不產(chǎn)生任何效果;在其他情況下其效果與Py_DECREF()
相同,區(qū)別在于其參數(shù)也會被設(shè)為NULL
。 針對Py_DECREF()
的警告不適用于所傳遞的對象,因為該宏會細(xì)心地使用一個臨時變量并在減少其引用計數(shù)之前將參數(shù)設(shè)為NULL
。每當(dāng)要減少在垃圾回收期間可能會被遍歷的對象的引用計數(shù)時,使用該宏是一個好主意。
-
void Py_IncRef(PyObject *o)?
- Part of the Stable ABI.
Increment the reference count for object o. A function version of
Py_XINCREF()
. It can be used for runtime dynamic embedding of Python.
-
void Py_DecRef(PyObject *o)?
- Part of the Stable ABI.
Decrement the reference count for object o. A function version of
Py_XDECREF()
. It can be used for runtime dynamic embedding of Python.