這個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的。