代码之家  ›  专栏  ›  技术社区  ›  Chris

为什么我可以更新一个列表切片而不是python中的字符串切片?

  •  5
  • Chris  · 技术社区  · 14 年前

    更奇怪的是,为什么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 回复  |  直到 10 年前
        1
  •  5
  •   Sven Marnach    14 年前

    python区分可变和不可变的数据类型。使字符串不可变是Python中的一般设计决策。整数是不可变的,不能更改 42 . 还考虑了字符串 价值观 在python中,所以不能更改 "fourty-two" 去别的地方。

    该设计决策允许进行多个优化。例如,如果字符串操作不更改字符串的值,cpython通常只返回原始字符串。如果字符串是可变的,则始终需要进行复制。

        2
  •  9
  •   Justin Ethier    14 年前

    因为在python中,字符串是 immutable .