Warum unterscheidet sich die Verwendung eines Doppelpunkts vom Ergebnis? Und was sollte das richtige Ergebnis sein?
%Vor% Python ist intelligent genug, um zu erkennen, dass beide Variablen den gleichen Wert erhalten (da sie in derselben Zeile interpretiert werden) und speichert diesen Wert daher am selben Speicherort (also id(x) == id(y)
).
Jedoch
%Vor% Python ist nicht intelligent genug, um zu erkennen, dass sie beide den gleichen Wert haben (da sie in separaten Zeilen interpretiert werden) und speichert sie daher jeweils an ihrem eigenen Speicherort ( id(x) != id(y)
).
Das ist nur ein Zufall, wie der Interpreter geschrieben ist. Das Gleiche in einem Skript zeigt ein anderes Ergebnis. Es sieht für mich so aus, als ob die Streicherinternation entlang von Kompilierungseinheiten stattfindet.
(stuff2.py hinzugefügt, um mehrere Module anzuzeigen)
stuff2.py:
%Vor%stopf.py:
%Vor%Nun, wie es offensichtlich ist, hängt dies mit dem String-Interning in Python zusammen. Dieser Mechanismus ist implementierungsabhängig, also jeder Python-Interpreter wie CPython , IronPython , PyPy , usw. könnten sich anders verhalten. Und es kann zwischen den Versionen wechseln. Es kann wahrscheinlich sogar zwischen den Läufen wechseln.
Um Ihren spezifischen Fall zu lösen, müsste der Quellcode der angegebenen Version Ihres Interpreters analysiert werden. Und die beste Wette ist, dass es einen leichten Unterschied bei der Implementierung der Anweisungen gibt, die in einer Zeile (getrennt durch Semikolon) übergeben und nacheinander ausgeführt werden.
Wenn Sie interaktiv arbeiten, müssen Sie beachten, dass zwischen jeder Codezeile ziemlich viel passieren kann - weil Sie es vielleicht untersuchen möchten. Wenn Sie alles auf einmal übergeben, muss sich der Interpreter viel weniger Gedanken darüber machen, was zwischen den Anweisungen passieren könnte.
Wenn Sie einer Variablen in Python ein unveränderliches Objekt zuweisen, zeigt die Variable ebenso wie der Wert auf denselben Ort,
%Vor%ID-Vergleich wird genau funktionieren, wie Sie die ID-Werte sehen können. Versuchen wir nun, veränderbare Objekte Python-Variablen zuzuordnen.
%Vor%Sie können den ID-Unterschied hier sehen. as 'is' vergleicht die Werte mit dem Adressort, wobei '==' direkt mit dem Referenzwert verglichen wird. Es gibt jedoch keinen Fehler im Falle von unveränderlichen Objekten, da alle Punkte auf den gleichen Ort verweisen, aber im Falle veränderbarer Werte können die Variablen auf das aktuelle Objekt zeigen und daher gibt es ein falsches Ergebnis.
Hoffe das hilft:)
Tags und Links python