Von diesem Link habe ich erfahren, dass
Die aktuelle Implementierung enthält ein Array von Integer-Objekten für alle Ganzzahlen zwischen -5 und 256. Wenn Sie ein int in diesem Bereich erstellen, erhalten Sie nur einen Verweis auf das vorhandene Objekt zurück
Aber als ich versucht habe, ein Beispiel für meine Sitzung zu geben, habe ich herausgefunden, dass sie sich beim Zuordnen und Tupel-Entpacken anders verhält.
Hier ist das Snippet,
%Vor%Weil int unveränderlich ist, kann Python existierendes Objekt verwenden oder nicht, wenn Sie den folgenden Code in einer Skriptdatei speichern und es ausführen, wird es zwei Wahr ausgeben.
%Vor%Wenn Python den Code kompiliert, kann er alle Konstanten wiederverwenden. Da Sie den Code in einer Python-Sitzung eingeben, werden die Codes Zeile für Zeile kompiliert, Python kann nicht alle Konstanten als ein Objekt wiederverwenden.
Das Dokument sagt nur, dass es nur eine Instanz für -5 bis 256 gibt, definiert aber nicht das Verhalten anderer. Für unveränderliche Typen ist is
und is not
nicht wichtig, da Sie sie nicht ändern können.
Drucke:
%Vor%4 0 LOAD_CONST 2 ((300, 300))
3 UNPACK_SEQUENCE 2
6 STORE_FAST 0 (a)
9 STORE_FAST 1 (b)
12 LOAD_CONST 0 (Keine)
15 RETURN_VALUE Keine
Drucke:
7 0 LOAD_CONST 1 (300)
3 STORE_FAST 0 (a)
8 6 LOAD_CONST 1 (300)
9 STORE_FAST 1 (b)
12 LOAD_CONST 0 (Keine)
15 RETURN_VALUE Keine
So sieht es im Wesentlichen gleich aus, aber mit LOAD_CONST
in einem Schritt in der ersten Methode und zwei Schritten in der zweiten Methode ....
BEARBEITEN
Nach einigen Tests stellte ich fest, dass beide Methoden False
zurückgaben. Bei nur einem Durchlauf, dh wenn die Methoden nicht in eine Schleife eingefügt werden, scheinen sie immer True
zurückzugeben. Manchmal verwendet es eine einzelne Referenz und manchmal nicht.
Die Dokumentation besagt nur, dass -5 bis 256 denselben Verweis zurückgeben werden; Daher sollten Sie einfach nicht is
für den Vergleich verwenden (in diesem Fall), da das aktuelle id
der Zahl keine Garantie dafür gibt.
Hinweis: Sie möchten is
niemals für den Vergleich von Werten verwenden, da dies nicht der richtige Wert ist, sondern um Identitäten zu vergleichen. Mein Punkt war, dass der Rückgabewert von is
nicht immer True
ist, wenn Sie außerhalb des definierten Bereichs sind.
Tags und Links python python-2.7 cpython