Quan creem un objecte i l'assignem a una variable, la variable simplement fa referència a l'objecte però no representa l'objecte. És a dir, el nom de la variable apunta a la posició de memòria que conté l'objecte. Això es coneix com vinculació o binding del nom a l'objecte.
Generalment no ens hem de preocupar d'aquests detalls, però les referències provoquen un efecte subtil que hem de conèixer. Veiem-ho amb el següent exemple.
Example 9.6. Objectes i referències
#!/usr/bin/python # -*- coding: utf-8 -*- # Filename: reference.py print 'Assignació simple' shoplist = ['poma', 'mango', 'pastanaga', 'platan'] mylist = shoplist # mylist és només un altre nom apuntant al mateix objecte! del shoplist[0] # Compro el primer element, així que l'elimino de la llista print 'shoplist és', shoplist print 'mylist és', mylist # Notem que tant shoplist com mylist contenen els mateixos elements sense # 'poma', confirmant que ambdós apunten al mateix objecte print 'Copia fent un segment complet' mylist = shoplist[:] # fem una còpia a partir d'un segment complet del mylist[0] # eliminem el primer element print 'shoplist és', shoplist print 'mylist és', mylist # notem que ara les dues llistes són diferents
$ python reference.py Assignació simple shoplist és ['mango', 'pastanaga', 'platan'] mylist és ['mango', 'pastanaga', 'platan'] Copia fent un segment complet shoplist és ['mango', 'pastanaga', 'platan'] mylist és ['pastanaga', 'platan']
Els comentaris haurien de ser suficients per a entendre l'exemple. Hem de recordar que si volem fer una còpia d'una llista o d'altres seqüències (no objectes simples com ara els enters), haurem de fer servir l'operació de segmentació. Quan assignem el nom d'una variable a un altre nom, ambdós passen a fer referència al mateix objecte, i això pot portar a tota mena de problemes si no anem amb compte.
Recordem que una sentència d'assignació per llistes no crea una còpia. Hem de fer servir l'operació de segmentació per a copiar una seqüència.