Quando si crea un oggetto e lo si assegna ad una variabile, la variabile si riferisce all'oggetto costruito ma non lo rappresenta assolutamente! Il nome della variabile in questione punta ad una parte di memoria fisica del PC in cui è stato memorizzato l'oggetto. Questo riferimento è chiamato spesso collegamento (binding) del nome all'oggetto.
Una particolarità cui prestare attenzione è quella dimostrata dall'esempio seguente, che nell'esperienza comune non ha creato troppi problemi ma che è sempre bene tener presente.
Esempio 9.6. Oggetti e riferimenti
#!/usr/bin/python # Filename: reference.py print 'Simple Assignment' shoplist = ['apple', 'mango', 'carrot', 'banana'] mylist = shoplist # mylist e' un altro nome che punta allo stesso oggetto! del shoplist[0] # Abbiamo acquistato il primo oggetto, dobbiamo percio' rimuoverlo print 'shoplist is', shoplist print 'mylist is', mylist # notare che sia shoplist che mylist stampano la stessa lista # senza l'elemento 'apple' a conferma che puntano realmente allo stesso oggetto print 'Copy by making a full slice' mylist = shoplist[:] # make a copy by doing a full slice del mylist[0] # remove first item print 'shoplist is', shoplist print 'mylist is', mylist # notare adesso la differenza tra le liste
$ python reference.py Simple Assignment shoplist is ['mango', 'carrot', 'banana'] mylist is ['mango', 'carrot', 'banana'] Copy by making a full slice shoplist is ['mango', 'carrot', 'banana'] mylist is ['carrot', 'banana']
Buona parte della spiegazione è contenuta nei commenti. Occorre invece prestare attenzione al fatto che se si vuole fare una copia di lista, sequenze o altri oggetti complessi (non oggetti semplici come possono essere gli interi), è necessario ricorrere alle operazioni di affettamento. Se si assegna un nuovo nome ad una variabile, entrambi i nomi (vecchio e nuovo) si riferiranno allo stesso oggetto e, come è facile immaginare, questo potrebbe indurre in clamorosi errori di programmazione.
Ricordarsi che un comando di assegnamento per le liste non crea una copia fisica. Per fare la copia si deve necessariamente ricorrere alle operazioni di affettamento descritte.