Das sind für mich Fragen auf einer Meta-Ebene, die über das hinausgehen, was für mich wichtig ist (meine Ansprüche sind halt bescheiden ...). Für mich genügt es zu wissen, wie es ist, und zu verstehen, wie es ist. Warum dies oder jenes in Python so oder so implementiert ist, warum eine Kopie erstellt werden sollte und wie Python irgendetwas feststellen sollte, das sind Fragen, mit denen ernsthaft mich zu beschäftigen ich keine Zeit habe - ich verdiene mein Geld nicht mit dem Programmieren.Trundle hat geschrieben:warum sollten denn von unveränderlichen Objekten überhaupt Kopien erstellt werden? Schließlich sind sie ja unveränderlich. Und wie soll Python feststellen, ob ein Typ unveränderlich ist oder nicht?
Nochmal zurück zu meiner (bisherigen) Vorstellung von dem, wie es ist: Fakt scheint aber doch zu sein, dass gemessen am "Verhalten" es tatsächlich so sein könnte, wie ich es mir vorstelle, also quasi so eine Art "duck typing": Ist zwar keine Kopie, verhält sich aber so. Alles, was dazu an Kritik bisher gekommen war, lautete im wesentlichen ja: "Nein, es ist eine Kopie und warum sollte Python auch eine Kopie anlegen."
Um nicht falsch verstanden zu werden: Es geht mir nicht darum, auf einer Sichtweise zu beharren, die faktisch falsch ist; zu provozieren oder irgendwelchen Widerspruch herauszufordern, sondern für mich zu klären, was an meiner bisherigen Vorstellung falsch war und was nicht.
Nach eurem weiteren Bemühen glaube ich, dass der Nebel sich langsam lichtet. Ich versuche es nochmal:
Bei der Bindung eines Objektes an einen Namen, wird IMMER eine Referenz erzeugt, ganz unabhängig vom Datentyp. Bei einer weiteren Zuweisung an eine Variable, wird ein weiterer Name an dieses Objekt gebunden (oder muss es heißen: Das Objekt wird an den Namen gebunden? Oder ist das egal?) und es ist nach wie vor nur ein und dasselbe Objekt, unabhängig vom Datentyp.
Wird jetzt über einen der Namen eine Änderung am Objekt vorgenommen, DANN kommt zum Tragen, ob das Objekt veränderlich ist oder nicht:
Ist es veränderlich, dann wird es halt verändert, aber es bleibt das gleiche Objekt, das weiterhin an alle Namen gebunden ist, an die es vorher auch schon gebunden war.
Ist es aber nicht veränderlich, dann erfolgt gar keine Änderung (weil es ja nicht möglich ist), sondern es entsteht ein NEUES Objekt, das per Zuweisung an einen neuen Namen gebunden wird. Ist der neue Name aber gar kein neuer Name, sondern der alte Name, dann sieht es zwar so aus, als wäre eine Änderung an einer Kopie des ursprünglichen Objekts erfolgt, in Wahrheit hat es aber nie eine Kopie gegeben, sondern es ist jetzt gerade ein neues Objekt erzeugt und an den alten Namen gebunden worden. Da das dem ursprünglichen Objekt und dem daran gebundenen Namen egal ist, bleibt es wie es ist.
Richtig?