Zwei Variablen in Python haben die gleiche id, aber keine Listen oder Tupel

Beiden Variablen in Python haben die gleichen id:

a = 10
b = 10
a is b
>>> True

Wenn ich zwei lists:

a = [1, 2, 3]
b = [1, 2, 3]
a is b
>>> False

laut dieser link Senderle antwortete, dass unveränderliche Objekt verweist, die gleiche id und veränderliche Objekte wie Listen haben unterschiedliche ids.

So, jetzt nach seiner Antwort, Tupel, sollten die gleichen ids - Bedeutung:

a = (1, 2, 3)
b = (1, 2, 3)
a is b
>>> False

Idealerweise als Tupel sind nicht veränderbar, sollte es wieder True, aber es ist wieder False!

Was ist die Erklärung?

Sie müssen unterscheiden zwischen Variablen und Objekten (Listen und Tupel) - beim vergleichen von zwei Objekten wie diesem vergleichen Sie die Speicheradressen unterscheiden sich, trotz gleicher list und tuple-Elementen.
Ich denke, Sie haben falsch verstanden, die Antwort, die Sie verknüpfen. Eindeutige unveränderliche Objekte haben unterschiedliche ids. Aber für die ganzen zahlen < 256 (bei den meisten Interpreten) den Wert vorab in den Speicher geladen und daher in Ihrem ersten Beispiel a ist b
Danke @JacquesGaudin! Es macht wenig Verständnis für mich.
Ob oder nicht diese Art der Optimierung erfolgt ist nicht garantiert. Sie sollten einfach aufhören zu denken, über diese, manchmal is zurück True und zu anderen Zeiten nicht. Wenn Sie sicher sein wollen, dass es zurück True einfach: b = a oder b = tuple(a) (die tuple Aufruf gibt eine Referenz auf das argument, wenn übergeben, der ein Tupel als parameter).
Ich bin Wiedereröffnung dies, weil die dup-Gegner nicht auf die Haupt-Punkt in dieser Frage, nämlich dann, wenn Veränderlichkeit hat eine Wirkung auf Identitäten.

InformationsquelleAutor Ram Vallury | 2016-07-04

Schreibe einen Kommentar