再議不可變物件
由之前的學習可知,str是不變物件,而list是可變物件。
對於可變物件,比如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』才是字串物件!有些時候,我們經常說,物件a的內容是』abc』,但其實是指,a本身是乙個變數,它指向的物件的內容才是』abc』:
當我們呼叫a.replace(『a』, 『a』)時,實際上呼叫方法replace是作用在字串物件』abc』上的,而這個方法雖然名字叫replace,但卻沒有改變字串』abc』的內容。相反,replace方法建立了乙個新字串』abc』並返回,如果我們用變數b指向該新字串,就容易理解了,變數a仍指向原有的字串』abc』,但變數b卻指向新字串』abc』了:
所以,對於不變物件來說,呼叫物件自身的任意方法,也不會改變該物件自身的內容。相反,這些方法會建立新的物件並返回,這樣,就保證了不可變物件本身永遠是不可變的。
python 可變物件和不可變物件
變數沒有型別,那麼就意味著它可以隨意指向任何物件。python中的變數相當於乙個指標。當將乙個變數a賦值給另乙個變數b時,無論變數a指向的是可變物件還是不可變物件,變數b指向變數a指向的物件。例 alist 1 2,3 anolist alist id alist id anolist true b...
Python可變物件和不可變物件
python中一切皆物件,每個物件都有其唯一的id,對應的型別和值,其中id指的是物件在記憶體中的位置。根據物件的值是否可修改分為可變物件和不可變物件。其中,不可物件包括 數字,字串,tuple,frozenset 不可變集合 可變物件包括 list,dict,set python中的變數可以指向任...
Python 可變物件和不可變物件
python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。一 不可變物件 由於python中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。從上面得知,不...