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
因此,对于不变对象来讲,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会建立新的对象并返回,这样,就保证了不可变对象自己永远是不可变的。字符串