# 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`.