这个blog解决一个问题是:为什么list不能作为dictionary的key值
- list没有相应的hash函数
- 为什么python没有给list提供一个合理的hash函数
1. list没有相应的hash函数
a = [1, 2]
b = {a: 1} #使用a作为字典的key,运行后会报下面的错误
TypeError: unhashable type: 'list'
说明list没有提供合理的hash函数
2. 为什么python没有给list提供一个合理的hash函数
如果给list提供hash函数,可以从两方面考虑
如果以id作为list的hash值,则会出现下面的问题:
a = [1, 2, 3]
b = [1, 2, 3]
# 如果分别以a,b作为字典的key的话,显然id(a) != id(b), 所以相同的值的list隐射不同的值,所以不能
# 满足查询操作
如果以list的值作为list的hash值,
a = [1, 2]
d = {a: 1} #以a作为key
a.append(3)
d[[1, 2]] #会报错,查询不到该key
d[[1, 2, 3]] #也会报错,因为在字典中对应的1是通过【1,2】进行mapping的。