点击上方“蓝字”关注我们
来源:cyril_lee
https://juejin.im/post/6844904198711017485
作为一种通用的编程语言,Python 为不同的用户场景提供了一系列内置的数据结构。
当你学习Python基础知识的时候,你可能在某些地方看到有提及可哈希。例如,你可能会看到
dict
中的键需要是可哈希的(请参见下面代码片段中的一个小示例)。
在另一个例子中,它提到了
set
中的元素需要是可哈希的。
>>> # 一个正确的字典声明
>>> good_dict = {
"a": 1, "b": 2}
>>>
>>> # 一个错误的字典声明
>>> failed_dict = {["a"]: 1, ["b"]: 2}
Traceback (most recent call last):
File "", line 1, in <module>
TypeError: unhashable type: 'list'
你可能会想知道可哈希到底是什么意思?哪些对象是可哈希的,而哪些又不是?如果我们使用不可哈希的对象作为字典的键会发生什么?诸如此类,你可能还想问很多相关的问题。
在本文中,我们将讨论关于哈希的一些基本的知识点,以让你可以解决上述的这些问题。最后你可能会发现这些问题一点都不像你开始想的那么难。
哪些对象是可哈希的,而哪些又不是?
当我们展开关于哈希的机制解释之前,第一个需要解决的问题就是哪些对象是可哈希的,而哪些又不是。
因为我们知道Python显式的要求能够加入
set
的元素应该是可哈希的,所以我们可以通过测试是否可以将一个对象加入set
来判断它的哈希属性。成功插入表示对象是可以被哈希的,反之亦然。
>>> # 创建一个空的集合
>>> elements = set()
>>>
>>> # 将各种类型的对象插入到这个集合中
>>> items = [1, 0.1, 'ab', (2, 3), {
'a': 1}, [1, 2], {
2, 4}, None]
<