
La garbage collection in Python
Nel linguaggio Python la garbage collection è un sistema di gestione automatica della memoria che si occupa di liberare lo spazio di memoria occupato da oggetti che non sono più necessari nel programma.
La garbage collection è molto utile perché ti permette di migliorare l'efficienza del programma nell'utilizzo delle risorse e di prevenire i problemi di overflow di memoria che possono verificarsi quando un programma continua ad allocare memoria senza mai liberarla.
Un esempio pratico
Per comprendere la garbage collection è molto utile ricorrere a un esempio pratico.
Assegna il valore intero 77 alla variabile "x".
x=77
Questa assegnazione crea un collegamento tra il nome della variabile "x" (etichetta) e il valore intero 77 (oggetto)
Pertanto, nell'etichetta "x" non c'è il valore 77 ma il riferimento ossia l'indirizzo di memoria dove si trova il valore 77.
Ora assegna alla variabile "x" un altro valore.
x=10
La nuova assegnazione elimina il vecchio collegamento tra l'etichetta "x" e il valore "77", creandone uno nuovo collegamento tra l'etichetta "x" e l'oggetto (10) che si trova in un indirizzo di memoria diverso dal precedente.
Adesso l'oggetto 77 non ha alcun riferimento da nessuna etichetta. Quindi, è inutilizzato dal programma.
In questo caso, la garbage collection elimina l'oggetto "77" dalla memoria, liberando lo spazio di memoria che occupava.
In questo modo si incrementa la quantità di memoria disponibile per l'archiviazione di ulteriori dati e si previene il rischio che i dati obsoleti saturino lo spazio di memoria disponibile.
Come funziona la garbage collection in Python
Python utilizza due strategie principali per la gestione della memoria: il conteggio dei riferimenti e il garbage collector ciclico.
1] Conteggio dei Riferimenti
Il conteggio dei riferimenti è la strategia principale utilizzata da Python per la gestione della memoria.
- +1 riferimento
Ogni volta che un oggetto viene referenziato, come quando viene assegnato a una variabile o aggiunto a una lista, Python aumenta di uno il conteggio dei riferimenti per quell'oggetto. - -1 riferimento
Allo stesso modo, quando un riferimento a un oggetto viene rimosso, Python riduce di uno il conteggio dei riferimenti per quell'oggetto.
Quando il conteggio dei riferimenti di un oggetto raggiunge zero, significa che l'oggetto non ha più riferimenti nel programma.
A questo punto, la garbage collection può liberare in modo sicuro la memoria occupata da quell'oggetto.
2] Garbage Collector Ciclico
Periodicamente Python esegue anche una garbage collection ciclica.
Questo componente del sistema di gestione della memoria di Python è progettato per gestire i cicli di riferimento, liberando la memoria che altrimenti sarebbe rimasta inutilizzata.
Cos'è un ciclo di riferimento? Un ciclo di riferimento si verifica quando due o più oggetti hanno dei riferimenti reciproci, senza essere utilizzati dal resto del programma.
Ad esempio, questo codice crea due liste vuote, poi in ognuna inserisce un riferimento all'altra ossia un "ciclo" di riferimenti.
lista1 = []
lista2 = []
lista1.append(lista2)
lista2.append(lista1)
Questa situazione non viene rilevata tramite il conteggio dei riferimenti, perché nessun oggetto ha zero riferimento.
Tuttavia, i due oggetti non sono realmente utilizzati nel programma.
Il garbage collector ciclico è pensato appositamente per rilevare queste situazioni ed eliminarle.
In conclusione, l'uso combinato del conteggio dei riferimenti e del garbage collector ciclico, consente al linguaggio Python di gestire la memoria in modo efficace e in sicurezza, liberando lo spazio di memoria quando non è più necessario e garantendo che la memoria sia sempre disponibile per nuovi oggetti quando serve.