Wenn Sie ein Objekt anlegen und es einer Variablen zuweisen, dann referenziert die Variable nur das Objekt, und stellt nicht das Objekt selber dar! Das heißt, der Variablenname zeigt nur auf den Teil des Speichers Ihres Computers, an dem das Objekt abgespeichert ist. Dies wird als Bindung des Namens an das Objekt bezeichnet.
Im Allgemeinen brauchen Sie sich darüber keine Gedanken zu machen, aber es gibt aufgrund der Referenzierung einen subtilen Effekt, dessen Sie sich bewusst sein sollten. Dies wird durch das folgende Beispiel demonstriert.
Beispiel 9.6. Objekte und Referenzen (referenz.py)
#!/usr/bin/python print 'Einfache Zuweisung' einkaufsliste = ['Aepfel', 'Mangos', 'Karotten', 'Bananen'] meineliste = einkaufsliste # meineliste ist nur ein anderer Name, der auf das gleiche Objekt zeigt! # Ich habe den ersten Posten gekauft und entferne ihn daher von der Liste del einkaufsliste[0] print 'einkaufsliste ist', einkaufsliste print 'meineliste ist', meineliste # Beachten Sie, dass sowohl einkaufsliste als auch meineliste # die gleiche Liste ohne die 'Aepfel' ausgeben, was bestaetigt, # dass sie auf das gleiche Objekt zeigen print 'Kopie mittels Teilbereichsoperation' meineliste = einkaufsliste[:] # auf diese Weise wird die gesamte Liste kopiert del meineliste[0] # entferne das erste Element print 'einkaufsliste ist', einkaufsliste print 'meineliste ist', meineliste # Beachten Sie, dass die beiden Listen nun unterschiedlich sind
$ python referenz.py Einfache Zuweisung einkaufsliste ist ['Mangos', 'Karotten', 'Bananen'] meineliste ist ['Mangos', 'Karotten', 'Bananen'] Kopie mittels Teilbereichsoperation einkaufsliste ist ['Mangos', 'Karotten', 'Bananen'] meineliste ist ['Karotten', 'Bananen']
Die Erklärung findet sich größtenteils schon in den Kommentaren. Denken Sie daran, dass Sie den Teilbereichsoperator verwenden müssen, wenn Sie eine Kopie einer Liste oder derartiger Sequenzen oder komplexer Objekte (nicht einfacher Objekte wie Ganzzahlen) erstellen wollen. Wenn Sie nur den Variablennamen einem anderen Namen zuweisen, dann referenzieren beide Namen das gleiche Objekt, was zu allen möglichen Schwierigkeiten führen kann, wenn Sie dies nicht beachten.
Denken Sie daran, dass Zuweisungsanweisungen für Listen nicht eine Kopie erzeugen. Sie müssen den Teilbereichsoperator verwenden, um eine Kopie der Sequenz zu erzeugen.