0
点赞
收藏
分享

微信扫一扫

极客编程python入门-不可变对象


不可变对象


str是不变对象,而list是可变对象


对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如


l = [1,2,34,56,34,78,23,12,12,34,45,657,45]

l.sort()

print(l)


极客编程python入门-不可变对象_不可变对象


例子:


>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'


虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc',应该怎么理解呢?


我们先把代码改成下面这样:


>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'


要始终牢记的是,​a​是变量,而​'abc'​才是字符串对象!有些时候,我们经常说,对象​a​的内容是​'abc'​,但其实是指,​a​本身是一个变量,它指向的对象的内容才是​'abc'​


极客编程python入门-不可变对象_不可变对象_02



当我们调用​a.replace('a', 'A')​时,实际上调用方法​replace​是作用在字符串对象​'abc'​上的,而这个方法虽然名字叫​replace​,但却没有改变字符串​'abc'​的内容。相反,​replace​方法创建了一个新字符串​'Abc'​并返回,如果我们用变量​b​指向该新字符串,就容易理解了,变量​a​仍指向原有的字符串​'abc'​,但变量​b​却指向新字符串​'Abc'​了:


极客编程python入门-不可变对象_不可变对象_03


所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。


理解这点很重要。

举报

相关推荐

0 条评论