9.Python 为什么list不能作为dictionary的key值

这个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的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章