str是不变对象,而list是可变对象
对于可变对象,比如list,对list操作,list内部的内容会变化的,比如:
>>>a=['c','b','a']
>>>a.sort()
>>>a
['a','b','c']
而对于不可变对象,比如str,对str进行操作:
>>>a='abc'
>>>b=a.replace('a','A')
>>>b
'Abc'
>>>a
'abc'
需要记住的是,a是变量,而'abc'才是字符串对象,但实际是指,a本身是一个变量,它指向的对象的内容才是'abc'
当我们调用a.replace('a,'A')时,实际调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名叫replace,但却没有改变字符串'abc'。相反,replace方法创建了一个新的字符串'Abc',并且用变量b指向该新字符串。
所以,对于不变对象来说,调用对象自身的任意方法,也不会改变对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的