Почему я могу обновить фрагмент списка, но не фрагмент строки в python? - PullRequest
5 голосов
/ 19 ноября 2010

Просто любопытно больше всего на свете, почему 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 голосов
/ 19 ноября 2010

Потому что в Python строки неизменны .

5 голосов
/ 19 ноября 2010

Python различает изменяемые и неизменяемые типы данных.Создание неизменяемых строк - это общее дизайнерское решение в Python.Целые числа неизменны, вы не можете изменить значение 42.Строки также считаются значениями в Python, поэтому вы не можете изменить "fourty-two" на что-то другое.

Это конструктивное решение предусматривает несколько оптимизаций.Например, если строковая операция не изменяет значение строки, CPython обычно просто возвращает исходную строку.Если бы строки были изменяемыми, всегда было бы необходимо сделать копию.

...