Sagen wir, ich habe eine Funktion:
%Vor%In IDLE, wenn ich rufe:
%Vor% Es wird True
Wenn ich rufe:
%Vor% Es wird False
Weißt du warum? Ich kann keine Erklärung in der Python-Dokumentation finden.
Die CPython-Implementierung von Python speichert konstante Werte (wie Zahlen, Strings, Tupel oder Freezens), die in einer Funktion als Optimierung verwendet werden. Sie können sie über func.__code__.co_consts
:
Wie Sie sehen können, werden für diese Funktion die Konstanten None
(der Standard Rückgabewert), 1
und (1,)
gespeichert. Da die Funktion einen von ihnen zurückgibt, erhalten Sie mit jedem Aufruf das exakt gleiche Objekt.
Da dies ein CPython-Implementierungsdetail ist, wird es nicht von der Python-Sprache garantiert. Das ist wahrscheinlich, warum Sie es in der Dokumentation nicht finden konnten:)
Python optimiert den Rückgabewert.
Da der Interpreter leicht erkennen kann, dass das zurückgegebene Tupel jedes Mal dasselbe ist und ein unveränderliches Objekt ist, gibt es das gleiche Objekt zurück (genau das gleiche. Gleiche Speicheradresse).
Wenn Sie a is b
eingeben, fragen Sie tatsächlich id(a) == id(b)
.
Vielleicht liegt es an Adressen im Speicher. Versuchen Sie einfach, sie über zu drucken Druckspeicheradresse der Python-Variablen
Tags und Links python python-3.6