Reference Counting¶
Les macros dans cette section permettent de gérer le compteur de références des objets Python.
-
void Py_INCREF(PyObject *o)¶
Incrémente le compteur de références de l'objet o.
Cette fonction est souvent utilisée pour convertir une référence empruntée en une référence forte sur place. La fonction
Py_NewRef()
peut être utilisée pour créer une nouvelle référence forte.L'objet ne doit pas être
NULL
, la fonctionPy_XINCREF()
doit être utilisée s'il est possible qu'il soitNULL
.
-
void Py_XINCREF(PyObject *o)¶
Incrémente le compteur de références de l'objet o. La macro n'a pas d'effet si l'objet est
NULL
.Voir aussi
Py_XNewRef()
.
-
PyObject *Py_NewRef(PyObject *o)¶
- Part of the Stable ABI since version 3.10.
Créer une nouvelle référence forte d'un objet : incrémente le compteur de référence de l'objet o et renvoie l'objet o.
Py_DECREF()
doit être appelée quand la référence forte n'est plus utilisée pour décrémenter le compteur de références de l'objet.L'objet o ne doit pas être
NULL
et la fonctionPy_XNewRef()
doit être utilisée si o peut êtreNULL
.Par exemple :
Py_INCREF(obj); self->attr = obj;
peut s'écrire :
self->attr = Py_NewRef(obj);
Voir aussi
Py_INCREF()
.Nouveau dans la version 3.10.
-
PyObject *Py_XNewRef(PyObject *o)¶
- Part of the Stable ABI since version 3.10.
Semblable à
Py_NewRef()
mais l'objet o peut êtreNULL
.Cette fonction renvoie
NULL
si l'objet o estNULL
.Nouveau dans la version 3.10.
-
void Py_DECREF(PyObject *o)¶
Décrémente le compteur de références de l'objet o.
Si le compteur de références atteint zéro, la fonction de dés-allocation du type de l'objet (qui ne doit pas être
NULL
) est invoquée.Cette fonction est généralement utilisée pour supprimer une référence forte avant qu'elle ne soit plus accessible.
L'objet en argument ne doit pas être
NULL
.Py_XDECREF()
doit être utilisée si l'objet peut êtreNULL
.Avertissement
La fonction de dés-allocation peut invoquer du code Python arbitraire (par exemple quand une instance d'une classe avec une méthode
__del__()
est supprimée). Le code exécuté a accès à toutes les variables Python globales mais les exceptions lors de l'exécution de ce code ne sont pas propagées. Tous les objets qui peuvent être atteints à partir d'une variable globale doivent être dans un état cohérent avant d'appelerPy_DECREF()
. Par exemple le code pour supprimer un élément d'une liste doit copier une référence à l'objet dans une variable temporaire, mettre à jour la liste, et enfin appelerPy_DECREF()
avec la variable temporaire.
-
void Py_XDECREF(PyObject *o)¶
Décrémente le compteur de références de l'objet o. L'objet peut être
NULL
, dans ce cas la macro n'a pas d'effet. Dans le cas contraire le comportement est identique àPy_DECREF()
et les mêmes avertissements sont de rigueur.
-
void Py_CLEAR(PyObject *o)¶
Décrémente le compteur de références de l'objet o. L'objet peut être
NULL
, dans ce cas la macro n'a pas d'effet. Dans le cas contraire le comportement est identique àPy_DECREF()
, puis l'argument est mis àNULL
. L'avertissement au sujet de l'objet passé en argument àPy_DECREF()
ne s'applique pas car la macro utilise une variable temporaire et met l'objet àNULL
avant de décrémenter le compteur de références.Il est recommandé d'utiliser cette macro lorsqu'on décrémente le compteur de référence d'un objet qui peut être parcouru par le ramasse-miette.
-
void Py_IncRef(PyObject *o)¶
- Part of the Stable ABI.
Incrémente le compteur de références de l'objet o. C'est la version fonctionnelle de
Py_XINCREF()
. Elle peut être utilisée lorsque Python est embarqué dynamiquement dans une application.
-
void Py_DecRef(PyObject *o)¶
- Part of the Stable ABI.
Décrémente le compteur de références de l'objet o. C'est la version fonctionnelle de
Py_XDECREF()
. Elle peut être utilisée lorsque Python est embarqué dynamiquement dans une application.
Les fonctions ou macros suivantes doivent être uniquement utilisées au sein de l'interpréteur et ne font pas partie de l'API publique : _Py_Dealloc()
, _Py_ForgetReference()
, _Py_NewReference()
, ainsi que la variable globale _Py_RefTotal
.