vrd*_*rde 3 python lambda closures
我在Python 2和3中注意到了这种行为:
>>> id(lambda: 1) == id(lambda: 2)
True
Run Code Online (Sandbox Code Playgroud)
它们也共享相同的哈希值.
>>> hash(lambda: 1) == hash(lambda: 2)
True
Run Code Online (Sandbox Code Playgroud)
我期望两个lambda函数有两个不同的 id s和hashes.
我调查了更多,并在返回闭包时发现了类似的行为:
>>> def foo(n):
... def bar():
... return n
... return bar
...
>>> id(foo(1)) == id(foo(2))
True
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为它id是相同的,因为返回的函数完全相同,而正在改变的只是封闭范围.
有什么类似的lambda功能发生?
这与范围,lambdas或闭包无关.简单地说,Python通过引用计数管理内存,并且这些lambda从不分配给任何引用,因此Python会立即删除它们并重用下一个对象的内存位置.