2012-03-15 51 views

回答

24

有幾個原因:

  • 可變對象如列表不能用作字典鍵或一組成員在Python,因爲它們不是hashable。如果列表根據其內容給出了方法__hash__,則返回的值可能隨着內容更改而改變,這違反了散列值的合約。
  • 如果Python只有可變序列,接受序列的構造函數通常需要複製它們以確保序列不能被其他代碼修改。構造函數可以通過僅接受元組來避免防禦性複製。更好的是,他們可以通過tuple方法傳遞序列參數,只有在必要時纔會複製。
+0

他們的哈希值可以改變?咦? – wim 2012-03-15 06:25:18

+2

wim - >在列表更改時散列值會更改。如果列表中有其他位置的參考,列表可以更改。 – 2012-03-15 06:29:31

+0

列表不可用。 – wim 2012-03-15 06:48:24

1

因爲否則就不會有不可變的序列類型!如果你想要一個可變元組,你只需要使用一個列表。

適當時使用不可變類型具有各種性能特權,並且如果它們被設置爲可變,則不能輕易使用帶有元組鍵的dict

相關問題