为什么我可以更新列表切片但不能更新字符串切片?

5 投票
2 回答
665 浏览
提问于 2025-04-16 07:20

我只是好奇,为什么Python允许我更新列表的一部分,但不允许我更新字符串呢?

>>> s = "abc"
>>> s[1:2]
'b'
>>> s[1:3]
'bc'
>>> s[1:3] = "aa"

>>> l = [1,2,3]
>>> l[1:3]
[2, 3]
>>> l[1:3] = [9,0]
>>> l
[1, 9, 0]

这背后有什么好的理由吗?(我相信一定有。)

2 个回答

9

因为在Python中,字符串是不可改变的。

5

在Python中,有可变和不可变的数据类型。把字符串设定为不可变是Python的一种设计选择。比如,整数是不可变的,你不能改变42这个值。字符串在Python中也被视为,所以你不能把"fourty-two"改成其他东西。

这种设计选择带来了几个优化的好处。例如,如果一个字符串操作没有改变字符串的值,CPython通常会直接返回原来的字符串。如果字符串是可变的,那每次操作都需要复制一份,这样就麻烦多了。

撰写回答