У меня есть следующий простой код:
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 заключает в себя саму переменную, а не объект этой ссылки на переменную? Сохраняет ли он имя переменной в виде простого текста, какой-то «ссылки на переменную» или что?