Python內置了字典:dict的支持,dict全稱dictionary,在其餘語言中也稱爲map,使用鍵-值(key-value)存儲,具備極快的查找速度。python
舉例:web
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
ui
>>> d['Michael'] 95
spa
dict能夠按照名字和成績的對照表,按照名字查成績。使用 key-value的形式進行存儲,速度極高。code
dict還能夠經過key放入,舉例:orm
>>> d['Adam'] = 67
對象
>>> d['Adam'] 67
ci
因爲一個key只能對應一個value,因此,屢次對一個key放入value,後面的值會把前面的值沖掉,若是key不存在,dict就會報錯。
要避免key不存在的錯誤,有兩種辦法,一是經過in
判斷key是否存在:rem
>>> 'Thomas' in d
字符串
False
二是經過dict提供的get()
方法,若是key不存在,能夠返回None
,或者本身指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1) % 後面的參數能夠本身定義此例子是-1
-1
要刪除一個key,用pop(key)
方法,對應的value也會從dict中刪除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
set和dict相似,也是一組key的集合,但不存儲value。因爲key不能重複,因此,在set中,沒有重複的key。key在set中也不是按照順序排列的。
相似數學的集合概念
要建立一個set,須要提供一個list做爲輸入集合:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s {1, 2, 3} %能夠看出,重複的數據自動被過濾
s.add(key) 用於添加數據,單數重複數據沒效果
s.remove(key) 用於刪除元素。
應爲set和數學意義的無序元素相同,因此能夠作交集,並集等操做
S1 & S2 交集
S1 | S2 並集
list是可變對象,對list進行操做時,list內部是能夠變化的。
分類操做
>>> a = ['c', 'b', 'a']
>>> a.sort() %分類
>>> a ['a', 'b', 'c']
而對於不可變對象,好比str,對str進行操做呢:
>>> a = 'abc'
>>> a.replace('a', 'A') %替換
'Abc'
>>> a
'abc'
雖然字符串有個replace()
方法,也確實變出了'Abc'
,但變量a
最後還是'abc'
,應該怎麼理解呢?
咱們先把代碼改爲下面這樣:
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
記住a是變量,而‘abc’纔是字符串對象。
咱們常常說,對象a
的內容是'abc'
,但實際上是指,a
自己是一個變量,它指向的對象的內容纔是'abc'
:
┌───┐ ┌───────┐ │ a │─────────────────>│ 'abc' │ └───┘ └───────┘
當咱們調用a.replace('a', 'A')
時,實際上調用方法replace
是做用在字符串對象'abc'
上的,而這個方法雖然名字叫replace
,但卻沒有改變字符串'abc'
的內容。相反,replace
方法建立了一個新字符串'Abc'
並返回,若是咱們用變量b
指向該新字符串,就容易理解了,變量a
仍指向原有的字符串'abc'
,但變量b
卻指向新字符串'Abc'
了:
┌───┐ ┌───────┐ │ a │─────────────────>│ 'abc' │ └───┘ └───────┘ ┌───┐ ┌───────┐ │ b │─────────────────>│ 'Abc' │ └───┘ └───────┘
因此,對於不變對象來講,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會建立新的對象並返回,這樣,就保證了不可變對象自己永遠是不可變的。