Tip:
Highlight text to annotate it
X
Finora ad ora abbiamo detto che la mutazione
modifica un oggetto esistente.
Ma non si può ancora vedere la differenza evidente con quello che facciamo con le stringhe.
Vedremo bene questa differenza quando introdurremo una nuova variabile.
Torniamo all'esempio precedente,
aggiungeremo ora un ulteriore assegnazione di variabile,
introducendo una nuova variabile.
Supponiamo di introdurre la viaribile 'q' .
Ed assegniamo 'p' a 'q' , che significa che il valore di 'p' ,
che sarebbe questo oggetto lista,
fa ora riferimento a 'q' .
La cosa importante qui avviene dopo l'assegnazione,
'p' e 'q' si riferiscono alla stessa lista.
Supponiamo di aver fatto una assegnazione
per modificare il valore di uno degli elementi di 'q' .
Bhé, questo cambierà l'elemento quattro di 'q' ,
quindi questo è l'elemento quattro di 'q' .
Cambierà il valore
con il punto esclamativo.
Cambierà anche il valore di 'p' .
Ma l'assegnazione non contiene in alcun modo 'p' ,
il fatto che 'p' e 'q' si riferiscano allo stesso oggetto
significa che è cambiato il valore di 'p' .
Per vedere come questo si comporti diversamente con le stringhe
proviamo a farlo con una stringa.
Vedete se riuscite ad indovinare cosa succede se assegniamo
un nuovo valore alla prima lettera della stringa.
Lanciamo il programma per vedere cosa succede.
Quello che otteniamo è un errore,
poiché la stringa è un oggetto immutabile.
Non c'è modo di cambiare il valore di una stringa,
e l'errore ci dice che non è possibile fare assegnazioni all'interno di una stringa,
a causa del tipo di oggetto, poiché è immutabile, non accetta l'assegnazione.
Una delle differenze principali tra oggetti mutabili e immutabili
è che se un oggetto è mutabile
dobbiamo fare attenzione alle altre variabili che potrebbero far riferimento allo stesso oggetto.
Possiamo cambiare il valore dell'oggetto,
e ciò cambierà non solo la variabile a cui noi pensiamo faccia riferimento
bensì tutte le altre variabili assegnate allo stesso oggetto.
Vediamo un esempiio.
Ho inizializzato 'p' assegnandolo alla lista che contiene 'Hello' .
Ora ho un'assegnazione che introduce la nuova variabile 'q'
e che assegna 'p' a quella variabile.
Stampiamo ora il valore di 'p' e 'q' ,
e vedremo che entrambe conterranno la stringa 'Hello' .
Cambiamo ora il valore della posizione zero.
Avremmo una assegnazione che memorizza
nella posizione zero di 'p' la lettera 'y' .
Questo cambia il valore di 'p' .
Cosa sorprendente potrebbe essere che questo cambia anche il valore di 'q' .
Anche se 'q' non compare nell'assegnazione ,
lo cambia in quanto 'q'
si riferisce allo stesso oggetto di 'p' .