A Byte of Python

Referenzen

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.

Objekte und Referenzen

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
				
				

Output

				
$ 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']
				
				

So funktioniert es

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.

Anmerkung für Perl-Programmierer

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.