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

时间:2010-11-19 14:07:38

标签: python string slice

最好奇怪为什么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 个答案:

答案 0 :(得分:9)

因为在python中,字符串是immutable

答案 1 :(得分:5)

Python区分可变和不可变的数据类型。使字符串不可变是Python中的一般设计决策。整数是不可变的,你不能改变42的值。字符串在Python中也被视为,因此您无法将"fourty-two"更改为其他内容。

此设计决策允许多项优化。例如,如果字符串操作不更改字符串的值,则CPython通常只返回原始字符串。如果字符串是可变的,则总是需要制作副本。