Python Language Comptage de référence


Exemple

La grande majorité de la gestion de la mémoire Python est gérée avec le comptage des références.

Chaque fois qu'un objet est référencé (par exemple, affecté à une variable), son compte de référence est automatiquement augmenté. Quand il est déréférencé (par exemple, la variable sort de la portée), son compte de référence est automatiquement diminué.

Lorsque le compteur de références atteint zéro, l'objet est immédiatement détruit et la mémoire est immédiatement libérée. Ainsi, dans la majorité des cas, le ramasse-miettes n'est même pas nécessaire.

>>> import gc; gc.disable()  # disable garbage collector
>>> class Track:
        def __init__(self):
            print("Initialized")
        def __del__(self):
            print("Destructed")
>>> def foo():
        Track()
        # destructed immediately since no longer has any references
        print("---")
        t = Track()
        # variable is referenced, so it's not destructed yet
        print("---")
        # variable is destructed when function exits
>>> foo()
Initialized
Destructed
---
Initialized
---
Destructed

Démontrer plus avant le concept de références:

>>> def bar():
        return Track()
>>> t = bar()
Initialized
>>> another_t = t  # assign another reference
>>> print("...")
...
>>> t = None          # not destructed yet - another_t still refers to it
>>> another_t = None  # final reference gone, object is destructed
Destructed