1. 程式人生 > >python知識整理--議可變物件和不可變物件以及str、list、tuple、dict、set

python知識整理--議可變物件和不可變物件以及str、list、tuple、dict、set

可變物件:變數、list

不可變物件:str、tuple、dict、set

1、變數是可變的不用多說,變數賦值一次便改變一次。

2、list

可變物件,可對list進行如下新增刪除排序等操作。

list = [2,3,5,1,2]
list.append(8)
list.insert(0,6)
list.pop(3)
list.sort()

list使用append()在末尾處新增元素;使用insert(n,m)在索引n即list[n]處新增m元素;使用pop(n)刪除索引n即list[n]處元素,預設pop()則為刪除末尾元素;使用sort()對list進行排序。

3、tuple

一旦初始化就不能修改,即沒有新增刪除排序等操作函式。tuple的元素,指向是不變的。

tuple = (1,2,3,4,5)

需要注意到的是定義空tuple則用(),而用來定義一個元素的話需要加上一個“,”逗號,否則python會將其處理為變數:

tuple = () #定義空的tuple
tuple = (1,) #定義一個元素的tuple

4、dic

即dictionary,使用鍵-值(key-value)儲存,具有極快的查詢速率。下面是對dic的初始化

dic = {'a':1,'b':2,'c':3}

為什麼dic查詢速率快,因為它和字典的原理一樣。通過鍵可以直接找到鍵對應存放值的記憶體地址。

dic[d] = 4
dic.get('x')
dic.get('x',-1)
dic.pop('a')

dic除了初始化的時候,還可以使用key將資料直接放入(dic同樣使用索引,例如dic['a'] ,互動介面會輸出1)

使用get()可以查詢dic中有無此key,沒有則返回NONE(互動介面不會顯示),或者指定數字,例如dic.get('x',-1)

使用in也可以查詢,python會輸出false或true

'y' in dic

在dic中刪除資料則用pop(key),對應的value也會變刪除。

和list不同,dic有幾個特點:1.查詢插入速度快,不會隨著資料增多而減慢;2.佔用記憶體大,資料越多佔用記憶體越大。

list的特點則是:1.查詢插入隨著元素增多變慢;2.佔用記憶體小。

dic屬於用空間換取速度。

dic因為按照key來查詢value(hash演算法),所以dic的key是絕對的不可變物件

5、set

原理和dic一樣,是一個key的集合,但是不儲存value,可以看成數學上無序和無重複元素的集合。因為無法判斷兩個變數是否相等,所以set也是不可變物件。

>>>set = ([1,2,2,3,3,3,4])
>>>set
{1,2,3,4}
>>>set.add(5)
>>>set
{1,2,3,4,5}
>>>set.remove(2)
>>>set
{1,3,4,5}

如上所示,但是輸出的順序是無序的,不一定是上面的輸出。

可以使用add()增加元素,remove()刪除元素。

6、str

str也是不變物件。雖然str有replace(),但是其實是產生了一個新的字串。例如:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
雖然replace的物件是'abc',但是並沒有改變'abc',而是建立了新字串'Abc'。
所以,對於不變物件來說,呼叫物件自身的任意方法,也不會改變該物件自身的內容。相反,這些方法會建立新的物件並返回,這樣,就保證了不可變物件本身永遠是不可變的。