1. 程式人生 > >python:dict vs list vs set

python:dict vs list vs set

blog ddb nbsp 得出 replace 我們 通過 自身 插入

list:

有序

tuple:

另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改

dict:

無序

對比:

和list比較,dict有以下幾個特點:

  1. 查找和插入的速度極快,不會隨著key的增加而變慢;
  2. 需要占用大量的內存,內存浪費多。

  而list相反:

  1. 查找和插入的時間隨著元素的增加而增加;
  2. 占用空間小,浪費內存很少。

所以,dict是用空間來換取時間的一種方法。

dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象

這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。

要保證hash的正確性,作為key的對象就不能變。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:

set:

set和dict類似,也是一組key的集合,但不存儲value。由於key不能重復,所以,在set中,沒有重復的key。無序

再議不可變對象

>>> a = abc
>>> b = a.replace(a, A)
>>> b
Abc
>>> a
abc

要始終牢記的是,a是變量,而‘abc‘才是字符串對象!有些時候,我們經常說,對象a

的內容是‘abc‘,但其實是指,a本身是一個變量,它指向的對象的內容才是‘abc‘

技術分享

當我們調用a.replace(‘a‘, ‘A‘)時,實際上調用方法replace是作用在字符串對象‘abc‘上的,而這個方法雖然名字叫replace,但卻沒有改變字符串‘abc‘的內容。相反,replace方法創建了一個新字符串‘Abc‘並返回,如果我們用變量b指向該新字符串,就容易理解了,變量a仍指向原有的字符串‘abc‘,但變量b卻指向新字符串‘Abc‘了:

技術分享

所以,對於不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象並返回,這樣,就保證了不可變對象本身永遠是不可變的。


轉載:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143167793538255adf33371774853a0ef943280573f4d000

python:dict vs list vs set