如果对象的哈希值在其生存期内保持不变,则该对象被认为是可哈希的。它具有__hash __()方法,可以与其他对象进行比较。为此,它需要__eq __()或__cmp __()方法。如果可比较的对象在比较时相等,则它们具有相同的哈希值。
由于这些数据结构在内部使用哈希值,因此可哈希化可将对象用作字典键和set成员。
python中所有不可变的内置对象都是可哈希的。诸如列表和字典之类的可变容器不可哈希,而不可变容器元组则可哈希
作为用户定义类实例的对象默认情况下可哈希化;它们都比较不相等(除了它们本身),并且它们的哈希值是从得出的id()
。
哈希显然不一定是该函数的ID:考虑给定的lambda函数。
m = lambda x: 1 print hash(m) print id(m) print m.__hash__()
输出结果
1265925722 3074942372 1265925722
这表明lambda函数是可哈希的
现在让我们考虑给定的函数f()
如下
def f():pass print type(f) print f.__hash__() print hash(f)
输出结果
<type 'function'> 1265925978 1265925978
这表明任何函数都是可哈希的,因为它的哈希值在其生命周期内保持不变。