Python不可變對象

  str是不變對象,而list是可變對象。spa

  對於不可變對象,好比對str進行操做:code

# 對於list進行操做,list內部的內容是會變化的:
>>> a = ['c', 'b', 'a']
>>> a
['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']

# 而對於不可變對象好比str進行操做:
>>> a = 'abc'
>>> a
'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'

# 把代碼改寫成下面這樣:
>>> 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‘了。blog

  因此,對於不變對象來講,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會建立新的對象並返回,這樣,就保證了不可變對象自己永遠是不可變的。字符串

相關文章
相關標籤/搜索