fanyuanfang86 发表于 2021-5-16 16:10:15

String为何不可变?

学习了小甲鱼老师的零基础入门学习python第041讲:魔法方法:构造和析构,如果继承String,同时 要进行一些改动的时候要重写__new__方法而不是__init__方法。现在有个疑问,就是为什么String就不可以变呢?

叙白 发表于 2021-5-16 16:33:10

官方文档说了:字符串是由 Unicode 码位构成的不可变 序列

hrp 发表于 2021-5-16 16:35:09

字符串str属于Python中的不可变数据类型,str实例对象没有改变自身的方法,只能通过重新赋值来获得另一个字符串,但重新赋值后就变成另一个实例对象了,已不是原来的对象。

不可变数据类型例:
>>> string = "abc"
>>> id(string)
24572832
>>> string = string + "d"
>>> string
'abcd'
>>> id(string) # string已不是原来的string,ID已变
63917568
>>>


可变数据类型例:
>>> lst =
>>> id(lst)
64206808
>>> lst.append(2) # 使用list实例对象的append方法来改变其自身
>>> lst

>>> id(lst) # ID相同,此时lst还是原来的lst,但其值发生了变化
64206808
>>>

kogawananari 发表于 2021-5-16 16:49:21

{:10_337:}我派生字符串属性的时候重写的时候没管new 直接重写init没事啊

fanyuanfang86 发表于 2021-5-16 20:04:50

hrp 发表于 2021-5-16 16:35
字符串str属于Python中的不可变数据类型,str实例对象没有改变自身的方法,只能通过重新赋值来获得另一个字 ...

谢谢。
页: [1]
查看完整版本: String为何不可变?