首页 > 编程语言 >极客编程python入门-不可变对象

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

时间:2022-11-12 18:00:32浏览次数:47  
标签:极客 python list 编程 Abc replace 对象 abc 字符串


不可变对象


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


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


理解这点很重要。

标签:极客,python,list,编程,Abc,replace,对象,abc,字符串
From: https://blog.51cto.com/apple0/5846666

相关文章