python:dict vs list vs set
list:
有序
tuple:
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改
dict:
無序
對比:
和list比較,dict有以下幾個特點:
- 查找和插入的速度極快,不會隨著key的增加而變慢;
- 需要占用大量的內存,內存浪費多。
而list相反:
- 查找和插入的時間隨著元素的增加而增加;
- 占用空間小,浪費內存很少。
所以,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