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