Come comprendi il modello di riferimento su cui si basa il linguaggio di programmazione Python?
sobes.tech AI
Risposta dell'AI
In Python, le variabili sono riferimenti (link) agli oggetti in memoria, non contenitori per i valori stessi. Quando assegniamo un valore a una variabile, questa inizia a puntare a un oggetto che contiene quel valore. Modificando una variabile che fa riferimento a un oggetto mutabile (ad esempio, una lista o un dizionario), si modifica l'oggetto stesso a cui la variabile fa riferimento. Modificando una variabile che fa riferimento a un oggetto immutabile (ad esempio, un numero, una stringa o una tupla), viene creato un nuovo oggetto in memoria e la variabile inizia a puntare a quello.
# Oggetto immutabile (int)
a = 10
b = a # a e b inizialmente fanno riferimento allo stesso oggetto
print(id(a), id(b)) # Stesso id
a = 20 # Crea un nuovo oggetto 20, a ora lo riferisce
print(id(a), id(b)) # Id diverso, b ancora riferisce a 10
# Oggetto mutabile (lista)
list1 = [1, 2, 3]
list2 = list1 # list1 e list2 riferiscono alla stessa lista
print(id(list1), id(list2)) # Stesso id
list1.append(4) # Modifica l'oggetto referenziato da entrambi
print(list1)
print(list2) # Entrambe le liste sono modificate
print(id(list1), id(list2)) # Sempre lo stesso id
Il meccanismo di conteggio dei riferimenti viene usato per la gestione automatica della memoria. Ogni oggetto traccia il numero di variabili che vi fanno riferimento. Quando questo numero raggiunge zero, l'oggetto diventa inaccessibile e il garbage collector libera la memoria occupata.
Una differenza importante rispetto ai linguaggi con memorizzazione diretta dei valori nelle variabili (ad esempio, C): in Python, con b = a, il valore di a non viene copiato in b, ma b inizia a riferirsi allo stesso oggetto di a.