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)

Increment the reference count for object o. The object must not be NULL; if you aren't sure that it isn't NULL, use Py_XINCREF().

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.

void Py_DECREF(PyObject *o)

Decrement the reference count for object o. The object must not be NULL; if you aren't sure that it isn't NULL, use Py_XDECREF(). If the reference count reaches zero, the object's type's deallocation function (which must not be NULL) is invoked.

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'appeler Py_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 appeler Py_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.

The following functions are for runtime dynamic embedding of Python: Py_IncRef(PyObject *o), Py_DecRef(PyObject *o). They are simply exported function versions of Py_XINCREF() and Py_XDECREF(), respectively.

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.