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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage