Добрый день. На собеседовании на должность Python junа столкнулся с такой задачей:
Есть код:
l1 = [lambda: x for x in range(3)]
l2 = [f() for f in l1]
l2
>>> [2, 2, 2]
Собственно вопрос, почему так? Возникала мысль что это 3 ссылки на один и тот же объект. Но при этом:
>>> l1[0] is l1[1]
False
>>> l1[1] is l1[2]
False
>>> l1[0] == l1[2]
False
Даже идентификаторы у объектов разные:
>>> for i in l1:
... print(id(i))
...
139905582396416
139905582396552
139905582396688
Я был уверен что должен быть результат аналогичный:
>>> l3 = [i for i in range(3)]
>>> l3
[0, 1, 2]
К сожалению, интервьюер ответа не дал :(