Oggetti e Riferimenti¶
Se eseguiamo queste istruzioni,
a = "banana"
b = "banana"
Sappiamo che a
e b
si riferiscono a una stringa
"banana"
. Ma non sappiamo se puntano alla stessa stringa.
Ci sono due possibili modi in cui l’interprete può organizzare lo stato interno:
oppure
In un caso, a
e b
si riferiscono a due oggetti diversi che hanno lo stesso valore.
Possiamo controllare se due nomi si riferiscono allo stesso oggetto usando l’operatore is. L’operatore is ritorna true se i due riferimenti puntano allo stesso oggetto.
La risposta è True
. Questo ci dice che sia a
che b
si riferiscono allo stesso oggetto e il secondo diagramma è quello che descrive la situazione in modo corretto.
Dal momento che le stringhe sono immutabili, Python ottimizza le risorse facendo riferire le due variabili allo stesso oggetto.
Questo non è il caso con le liste. Considera il seguente esempio, a
e b
si riferiscono a due liste diverse, che contengono gli stessi valori.
Il diagramma dei riferimenti per questo esempio è il seguente:
a
e b
hanno lo stesso valore ma non si riferiscono allo stesso oggetto.
La variabile a
è un riferimento a una collezione di riferimenti. Questi riferimenti si riferiscono ai valori interi nella lista. In altre parole, una lista è una collezione di riferimenti a oggetti. E’ interessante notare che anche se a
e b
sono due liste diverse, l’oggetto intero 81
è condiviso da entrambi. Come le stringhe, gli interi sono anch’essi immutabili e per questo Python ottimizza e fa condividere lo stesso oggetto.