【发布时间】:2020-04-13 12:18:54
【问题描述】:
我想知道为什么 Python 3.7 函数的行为方式相当奇怪。我认为这与hashability 的整个概念有点奇怪和矛盾。让我用一个简单的示例代码来澄清我遇到的问题。知道元组是可散列的,请考虑以下几点:
a = (-1, 20, 8)
b = (-1, 20, 8)
def f(x):
return min(x), max(x)
现在让我们检查一下:
>>> print(a is b, a.__hash__() == b.__hash__())
False True
>>> print((-1, 20, 8) is (-1, 20, 8))
True
这很奇怪,但我猜“命名”可散列对象会使它们有所不同(它们的 id() 在变量定义期间发生变化)。功能怎么样? Functions are hashable,对吧?让我们看看:
>>> print(f(a) is f(b))
False
>>> print(id(f(a)) == id(f(b)), f(a).__hash__() == f(b).__hash__())
True True
现在这是我困惑的高潮。你应该感到惊讶,即使f(a) is f(a) 也是False。但怎么会呢?你不觉得这种行为是不正确的,应该由 Python 社区解决和修复吗?
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: python function tuples equality hashable