这些数字非常有用,因为它们可以快速查找大量值集合中的值。两个使用它们的例子是 Python 的 set和 dict。在 list中,如果您想检查某个值是否在列表中,那么对于 if x in values:,Python 需要遍历整个列表,并将 x与列表 values中的每个值进行比较。这可能需要很长的时间为一个长的 list。在 set中,Python 会跟踪每个哈希值,当您键入 if x in values:时,Python 将获得 x的哈希值,在内部结构中查找,然后只将 x与具有与 x相同哈希值的值进行比较。
$ /opt/python33/bin/python3
Python 3.3.2 (default, Jun 17 2013, 17:49:21)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> hash("foo")
1849024199686380661
>>>
$ /opt/python33/bin/python3
Python 3.3.2 (default, Jun 17 2013, 17:49:21)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> hash("foo")
-7416743951976404299
>>> dmv_appointments[hash(jim)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 9, in __eq__
AttributeError: 'int' object has no attribute 'ssn'
>>> hash(jim) == hash(hash(jim))
True