python——可变对象和不可变对象
可变对象和不可变对象
1.list是可变对象,而字符串(str)、整数、tuple等是不可变对象
2.对于可变对象l,比如 list,对 list 进行操作,list内部的内容是变化的
如:
1 >>> a=['c','b','a'] 2 >>> a.sort() 3 >>> a 4 ['a', 'b', 'c']
3.对于不可变对象,比如 str,对 str 进行操作:
1 >>> a='abc'
2 >>> a.replace('a','A') #将a替换成A,返回替换后的变量
3 'Abc'
4 >>> a #但是变量a本身还是不变的
5 'abc'
变量a不变的原因:
当调用 a.replace()函数时,会创建一个新的对象,即变量b,将改变后的新字符串赋值给变量b,而变量a里面的内容不变
如下代码:
1 >>> a='abc'
2 >>> b=a.replace('a','A')
3 >>> b
4 'Abc'
5 >>> a
6 'abc'
要始终牢记的是,a是变量,而'abc'才是字符串对象!有些时候,我们经常说,对象a的内容是'abc',但其实是指,a本身是一个变量,它指向的对象的内容才是'abc'
当我们调用a.replace('a','A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了
变量a→‘abc’
变量b→‘Abc’
所以,对于不可变对象来说,调用对象自身的任意方法,都不会改变该对象的自身内容,这些方法会创建新的对象,并将返回结果指向这个新的对象中。