Wie unterscheidet sich das Tupel-Entpacken von der normalen Zuweisung?

8

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%     
James Sapam 22.12.2013, 12:26
quelle

2 Antworten

7

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.

    
HYRY 22.12.2013, 12:55
quelle
2
%Vor%

Drucke:

  

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

%Vor%

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.

    
Steve P. 22.12.2013 12:46
quelle

Tags und Links