Python lambda函数的内存地址

Python lambda函数的内存地址,python,lambda,closures,Python,Lambda,Closures,我在Python 2和3中注意到了这种行为: >>> id(lambda: 1) == id(lambda: 2) True 它们也共享相同的散列 >>> hash(lambda: 1) == hash(lambda: 2) True 我希望两个lambda函数有两个不同的ids和hashes 我进行了更多的调查,在返回闭包时发现了类似的行为: >>> def foo(n): ... def bar(): ...

我在Python 2和3中注意到了这种行为:

>>> id(lambda: 1) == id(lambda: 2)
True
它们也共享相同的散列

>>> hash(lambda: 1) == hash(lambda: 2)
True
我希望两个lambda函数有两个不同的ids和
hash
es

我进行了更多的调查,在返回闭包时发现了类似的行为:

>>> def foo(n):
...     def bar():
...         return n
...     return bar
... 
>>> id(foo(1)) == id(foo(2))
True
在这种情况下,我假设
id
是相同的,因为返回的函数是完全相同的,而变化的是只是封闭的范围


lambda
函数中是否发生了类似的情况?

这与作用域、lambda或闭包无关。很简单,Python通过引用计数来管理内存,并且这些lambda从未分配给任何引用,因此Python会立即删除它们,并将内存位置重新用于下一个对象。

Simly me,
a=lambda:1;b=λ:2;id(a)==id(b)
返回
False
。谢谢。嗨@Daniel,如果我创建两个lambda函数而没有任何名称引用,它的内存位置是否总是相同的?我的意思是它有时可能在不同的内存位置,对吗?