Weird поведение замыкания в python

У меня есть следующий простой код:

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

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

Как и ожидалось, исходя из моих знаний о python, вывод равен 3 - весь список будет содержать n последнее значение i. Но как это работает внутри?

Насколько я знаю, переменные python — это просто ссылки на объекты, поэтому первое замыкание должно заключать в себе первую iссылку на объект — и этот объект определенно равен 1, а не 3 O_O. Как получается, что закрытие python заключает в себя саму переменную, а не объект этой ссылки на переменную? Сохраняет ли он имя переменной в виде простого текста, какой-то «ссылки на переменную» или что?

13
задан Gareth Latty 19 June 2012 в 21:46
поделиться