Python學習筆記——可變物件和不可變物件
阿新 • • 發佈:2019-02-02
知識點:python中,萬物皆物件。
python中不存在所謂的傳值呼叫,一切傳遞的都是物件的引用,也可以認為是傳址。
一、可變物件和不可變物件
Python在heap中分配的物件分成兩類:可變物件和不可變物件。所謂可變物件是指,物件的內容可變,而不可變物件是指物件內容不可變。
不可變(immutable):int、字串(string)、float、(數值型number)、元組(tuple)
可變(mutable):字典型(dictionary)、列表型(list)
不可變型別特點:
看下面的例子(例1)
i = 73
i += 2
從上圖可知,不可變物件的特徵沒有變,變的只是建立了新物件,改變了變數的物件引用。
看一個例子(例2)
>>>x = 1 >>>y = 1 >>>x = 1 >>> x is y True >>>y is z True
如上所示,因為整數為不可變,x,y,z在記憶體中均指向一個值為1的記憶體地址,也就是說,x,y,z均指向的是同一個地址,值得注意的是,整形來說,目前僅支援(-1,100)。
總結一下,不可變物件的優缺點。
優點是,這樣可以減少重複的值對記憶體空間的佔用。
缺點呢,如例1所示,我要修改這個變數繫結的值,如果記憶體中沒用存在該值的記憶體塊,那麼必須重新開闢一塊記憶體
下面看一個可變物件的例子(例3)
m=[5,9] m+=[6]
二、函式引數:
Python函式引數對於可變物件,函式內對引數的改變會影響到原始物件;對於不可變物件,函式內對引數的改變不會影響到原始引數。原因在於:
1、可變物件,引數改變的是可變物件,其內容可以被修改。
2、不可變物件,改變的是函式內變數的指向物件。
參考連結: