python lambda函数可变性

Ben*_*ott 6 python lambda

我在python解释器中尝试了以下代码:

>>> def say(n):
...   print n
... 
>>> say(12)
12
>>> test = []
>>> for each in range(30):
...   test.append(lambda: say(each))
... 
>>> test[0]()
29
>>> test[13]()
29
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,不应该在最后两次调用时返回0和13.我试过直接看测试本身,看起来它的所有功能都是截然不同的

>>> test[0] == test[1]
False
>>> test[0]
<function <lambda> at 0x203e140>
>>> test[1]
<function <lambda> at 0x203e1b8>
Run Code Online (Sandbox Code Playgroud)

知道为什么他们都表现得一样吗?