Objektreferenzen Python
Verfasst: Donnerstag 11. Mai 2023, 18:29
Hallo liebe Community,
ich habe eine Frage bezüglich Objektreferenzen und dem kopieren von Objekten.
Und zwar steht in meinem Pythonbuch ungefähr folgendes:
Da Python gerne Ressourcen spart, kann es zu einem ungewöhnlichen Verhalten kommen. Wenn ein Objekt über eine Referenz einen Wert zugewiesen bekommt und auf denselben Wert bereits von einer anderen Referenz verwiesen wird, kann es passieren, dass anschließend beide Referenzen auf dasselbe Objekt verweisen. Dies geschieht, da Python Ressourcen sparen will.
Beispiel:
Die Ausgabe dieses Programmes lautet so:
x:42, y:56, identisch:False
x:42, y:42, identisch:True
Auf der Seite danach steht aber in meinem Buch ungefähr das hier:
Um eine echte Kopie von einem nicht einfachen Objekt wie Liste, Tupel, Dictionary, Set usw. zu erzeugen, muss man die Funktion deepcopy() nutzen oder man erstellt ein leeres Objekt und fügt anschließend alle Elemente einzeln hinzu.
Beispiel:
Die Ausgabe dieses Programmes lautet folgendermaßen:
dasselbe Objekt:False
gleicher Inhalt: True
dasselbe Objekt:False
gleicher Inhalt:True
So. Jetzt zu meiner Frage. Wieso wird im ersten Programm am Ende ausgegeben, dass x und y auf dasselbe Objekt verweisen, aber bei dem zweiten Programm nicht? Denn nach der Zeile hat x doch den gleichen Inhalt wie y. Also müssten beide Referenzen laut dem ersten Text auf das gleiche Objekt verweisen. Aber dies ist ja nicht der Fall, wie man der Ausgabe entnehmen kann.
Ich weiß, dass meine Frage vielleicht etwas kompliziert formuliert ist, aber ich habe versucht, es so gut zu erklären wie ich es eben kann. Das hier ist jetzt schon das zweite Forum, in dem ich diese Frage stelle und ich freue mich wirklich sehr über jede Antwort.
LG Pythonfan3000
ich habe eine Frage bezüglich Objektreferenzen und dem kopieren von Objekten.
Und zwar steht in meinem Pythonbuch ungefähr folgendes:
Da Python gerne Ressourcen spart, kann es zu einem ungewöhnlichen Verhalten kommen. Wenn ein Objekt über eine Referenz einen Wert zugewiesen bekommt und auf denselben Wert bereits von einer anderen Referenz verwiesen wird, kann es passieren, dass anschließend beide Referenzen auf dasselbe Objekt verweisen. Dies geschieht, da Python Ressourcen sparen will.
Beispiel:
Code: Alles auswählen
x = 42
y = 56
print("f"x:{x}, y:{y}, identisch:{x is y}")
y = 42
print(f"x:{x}, y:{y}, identisch:{x is y}")
x:42, y:56, identisch:False
x:42, y:42, identisch:True
Auf der Seite danach steht aber in meinem Buch ungefähr das hier:
Um eine echte Kopie von einem nicht einfachen Objekt wie Liste, Tupel, Dictionary, Set usw. zu erzeugen, muss man die Funktion deepcopy() nutzen oder man erstellt ein leeres Objekt und fügt anschließend alle Elemente einzeln hinzu.
Beispiel:
Code: Alles auswählen
import copy
x = [23, "hallo", -7.5]
y = []
for i in x:
y.append(i)
print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
x = [23, ["Berlin", "Hamburg"], -7.5, 12, 67]
y = copy.deepcopy(x)
print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
dasselbe Objekt:False
gleicher Inhalt: True
dasselbe Objekt:False
gleicher Inhalt:True
So. Jetzt zu meiner Frage. Wieso wird im ersten Programm am Ende ausgegeben, dass x und y auf dasselbe Objekt verweisen, aber bei dem zweiten Programm nicht? Denn nach der Zeile
Code: Alles auswählen
y.append(i)
Ich weiß, dass meine Frage vielleicht etwas kompliziert formuliert ist, aber ich habe versucht, es so gut zu erklären wie ich es eben kann. Das hier ist jetzt schon das zweite Forum, in dem ich diese Frage stelle und ich freue mich wirklich sehr über jede Antwort.
LG Pythonfan3000
