lambda函数的内存地址

时间:2016-06-20 13:32:50

标签: python lambda closures

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

>>> id(lambda: 1) == id(lambda: 2)
True

他们也共享相同的哈希值。

>>> hash(lambda: 1) == hash(lambda: 2)
True

我希望这两个lambda函数有两个不同的 idhash es。

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

>>> def foo(n):
...     def bar():
...         return n
...     return bar
... 
>>> id(foo(1)) == id(foo(2))
True

在这种情况下,我认为id是相同的,因为返回的函数完全相同,而正在改变的是只是封闭范围

lambda函数发生了类似的事情吗?

1 个答案:

答案 0 :(得分:5)

这与范围,lambdas或闭包无关。简单地说,Python通过引用计数管理内存,并且这些lambda从不分配给任何引用,因此Python会立即删除它们并重用下一个对象的内存位置。