【问题标题】:Why can I update a list slice but not a string slice in python?为什么我可以在 python 中更新列表切片而不是字符串切片?
【发布时间】:2011-05-12 15:54:57
【问题描述】:

只是好奇为什么 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]

这样做有充分的理由吗? (我确定有。)

【问题讨论】:

  • "这样做有充分的理由吗?"是的。字符串不是列表。说真的,这就是原因。它们的工作方式不同。

标签: python string slice


【解决方案1】:

因为在python中,字符串是immutable

【讨论】:

  • +1。在许多编程语言(提供字符串实现)中都是如此
  • 好点,我完全忘记了python字符串的这个方面。很抱歉浪费时间。
  • 不要因此而自责。另外,它可能会帮助下一个碰巧遇到这个问题的人:)
  • @Justin Ethier:由于问题是重复的,它可能对任何人都没有帮助。例如stackoverflow.com/questions/1228299/… 本质上是同一个问题。
  • “更改字符串中的字符(在 python 中)”与“为什么我可以更新列表切片而不是字符串切片?”主题似乎足以区分它们。而此时我坦率地不在乎,答案让我自己满意。如果您认为这是重复投票关闭它。
【解决方案2】:

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

此设计决策允许进行多项优化。例如,如果一个字符串操作没有改变一个字符串的值,CPython 通常只是简单地返回原始字符串。如果字符串是可变的,则总是需要进行复制。

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2023-04-09
    • 2020-11-27
    • 2021-11-28
    • 2014-07-21
    • 2012-02-15
    相关资源
    最近更新 更多