Nach der Lektüre this und this, die auf meine Frage ziemlich ähnlich sind, kann ich noch nicht das folgende Verhalten verstehen:Python3 Mehrfachbelegung und Speicheradresse
a = 257
b = 257
print(a is b) #False
a, b = 257, 257
print(a is b) #True
Wenn id(a)
und id(b)
Druck ich, dass die Variablen sehen kann, zu denen wurden die Werte in getrennten Leitungen zugeordnet sind, unterschiedliche IDs haben, während bei beiden Werten Mehrfachzuordnung die gleiche ID haben:
a = 257
b = 257
print(id(a)) #139828809414512
print(id(b)) #139828809414224
a, b = 257, 257
print(id(a)) #139828809414416
print(id(b)) #139828809414416
Aber es ist unmöglich, dieses Verhalten zu erklären, daß eine Mehrfachzuordnung von gleichen Werten, da immer Zeiger auf die gleiche ID erstellt:
a, b = -1000, -1000
print(id(a)) #139828809414448
print(id(b)) #139828809414288
Gibt es eine klare Regel, was erklärt, wenn die Variablen die gleichen id
und, wenn sie nicht bekommen?
bearbeiten
relevante Informationen: Der Code in dieser Frage im interaktiven Modus ausgeführt wurde (ipython3)
Check out '[id (i) für in i (1000,1000,1000,1000)]' :-) –
Hinweis: Das Verhalten ist inkonsistent, weil es nie ankommt. Wenn es einen Grund gäbe, sich darum zu kümmern, ob zwei '257's das gleiche Objekt waren, würde es ein einfaches, vernünftiges Muster geben. – user2357112
Peephole-Optimierungen, irrelevant, wie es funktioniert, da es nie etwas ist, auf das Sie sich verlassen würden oder sollten. –