Seltsames Schließverhalten in Python
Ich habe folgenden einfachen Code:
def get():
return [lambda: i for i in [1, 2, 3]]
for f in get():
print(f())
Die Ausgabe ist erwartungsgemäß 3 - die gesamte Liste enthält den letzten Wert voni
. Aber wie funktioniert das intern?
AFAIK, Python-Variablen verweisen einfach auf Objekte, daher muss der erste Abschluss zuerst das Objekt einschließeni
Referenz - und dieses Objekt ist definitiv 1, nicht 3 O_O. Wie kommt es, dass der Python-Abschluss die Variable selbst einschließt, anstatt diese Variablenreferenz zu objektieren? Speichert es den Variablennamen als Klartext, einen "Verweis auf die Variable" oder was?