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:

List illustration

oppure

List illustration

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.




(chp09_is1)

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.




(chp09_is2)

Il diagramma dei riferimenti per questo esempio è il seguente:

Reference diagram for equal different lists

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.

(chp09_istrace)

Next Section - Alias e Cloni