【问题标题】:Memory address of a lambda functionlambda函数的内存地址
【发布时间】:2016-06-20 13:32:49
【问题描述】:

我在 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():
...         return n
...     return bar
... 
>>> id(foo(1)) == id(foo(2))
True

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

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

【问题讨论】:

    标签: python lambda closures


    【解决方案1】:

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

    【讨论】:

    • 真傻,a = lambda: 1; b = lambda: 2; id(a) == id(b) 返回False。谢谢。
    • 嗨@Daniel,如果我创建两个没有任何名称引用它的lambda函数将具有相同的内存位置,这是否总是正确的?我的意思是它有时可能在不同的内存位置对吗?
    猜你喜欢
    • 2014-01-03
    • 2014-02-18
    • 1970-01-01
    • 2017-02-24
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多