Comportamento de fechamento estranho em python

Eu tenho um código simples a seguir:

def get():
    return [lambda: i for i in [1, 2, 3]]

for f in get():
    print(f())

Como esperado do meu conhecimento python, a saída é 3 - a lista inteira conterá o último valor dei. Mas como isso funciona internamente?

AFAIK, variáveis ​​python são simplesmente referência a objetos, então o primeiro fechamento deve incluir primeiro o objetoi referência - e este objeto é definitivamente 1, não 3 O_O. Como acontece que o fechamento de python inclui a própria variável em vez de objeto essa referência de variável? Ela salva o nome da variável como texto simples, alguma "referência à variável" ou o quê?

questionAnswers(3)

yourAnswerToTheQuestion