Python lambda函数的内存地址
我在Python 2和3中注意到了这种行为: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(): ...
>>> 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函数而没有任何名称引用,它的内存位置是否总是相同的?我的意思是它有时可能在不同的内存位置,对吗?