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