Python Garbage Collector

Da Andreabont's Wiki.

Il Python dispone di un sistema di pulizia della memoria di tipo reference counting, per ovviare alla possibilità di avere dipendenze circolari, viene affiancato un normale garbage collector che interviene dove il reference counter fallisce.

Interfaccia del Garbage Collector

E' disponibile il modulo gc che permette di interagire con il garbage collector del python.

Abilita/Disabilita

E' possibile abilitare o disabilitare il garbage collector a richiesta a runtime, questo perchè se non è presente alcuna dipendenza circolare è possibile basarsi esclusivamente sul reference counter.

import gc

gc.enable()    # Attiva il garbage collector
gc.disable()   # Disattiva il garbage collector
gc.isenabled() # Controlla lo stato del garbage collector

Analisi

E' possibile chiedere al garbage collector delle informazioni sullo stato attuale, globale o di oggetti specifici.

import gc

gc.is_tracked(obj) # Controlla se l'oggetto passato è tracciato dal gc
gc.get_objects()   # Ritorna lista oggetti tracciati dal gc
gc.get_stats()     # Ritorna statistiche del gc

Interazione

E' possibile interagire direttamente con il gc.

import gc

gc.collect()   # Forza l'intervento del gc.
gc.callbacks() # Specifica callbacks

Finalize

Anche il python dispone di un metodo che viene chiamato al momento della cancellazione dell'oggetto.

class Garbage:
    def __init__(self):
        print("Creo")

    def __del__(self):
        print("Distruggo")