list為什麼不能作為key
至於這個問題,最直接的答案就是:list沒有支援__hash__方法,那麼為什麼呢?
對於list的hash函式,我們可能有下面兩種實現的方式:
第一種,基於id。這滿足條件,「如果hash值不同,那麼他們的id當然不同」。但考慮到list一般是作為容器,基於id來hash可能會導致下面兩種情況:
用相同的list作為key去字典中找某個元素可能會得到不同的結果,因為是基於id hash的,所以即使他們的內容相同,字典依然將他們作為不同的元素對待。 建立乙個一模一樣的list用字典查詢永遠會得到乙個keyerror。
第二種,基於內容。tuple就是這樣做的,但是要注意一點,list是可以修改的。當list修改之後,你就永遠別想再從字典中拿回來了。見下面的**。
鑑於兩種實現的方式都存在一定的***,所以python規定:
內建的list不能作為字典的key.
但tuple是不可變,所以tuple可以作為字典的key。
Python 為什麼list不能作為字典的key?
很多python初學者經常會有這樣的疑問,為什麼python有tuple 元組 和list 列表 兩種型別?為什麼tuple可以作為字典的key,list不可以?要理解這個問題,首先要明白python的字典工作原理。在python中,字典也就是乙個個的 對映 將key對映到value 對乙個特定的k...
a 為什麼不能作為左值
下面引用在部落格上看到的乙個易於理解的回答 首先說左值和右值的定義 變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的 addressable 對於每乙個變數都有兩個值與其相聯 1 它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值 rvalue,讀做are value...
i 為什麼不能作為左值?
1 首先說左值和右值的定義 變數和文字常量都有儲存區,並且有相關的型別。區別在於變數是可定址的 addressable 對於每乙個變數都有兩個值與其相聯 1 它的資料值,儲存在某個記憶體位址中。有時這個值也被稱為物件的右值 rvalue,讀做are value 我們也可認為右值的意思是被讀取的值 r...