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