lettura facile

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)

un esempio di assegnazione di un'etichetta a un 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.

la nuova assegnazione modifica il riferimento nell'etichetta x

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.

la garbage collection elimina l'oggetto 77

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.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin