Изменяемые и неизменяемые типы
Одни значения в Python можно менять на месте, другие — нет. Эта разница объясняет ряд загадок для новичка.
В чём разница
Список изменяемый: в него можно добавлять и удалять элементы, менять их. Число, строка и кортеж неизменяемы: их нельзя поменять «внутри» — можно лишь создать новое значение. Строка не меняется по букве, для изменения делают новую строку.
Пример с list и str
У списка есть методы, меняющие его на месте (append, например). У строки таких нет — все её методы возвращают НОВУЮ строку, а исходная остаётся прежней.
nums = [1, 2]
nums.append(3) # список изменился: [1, 2, 3]
s = 'abc'
s.upper() # вернёт 'ABC', но s всё ещё 'abc'
Почему это важно
Изменяемость объясняет частые сюрпризы: почему upper() «не сработал» (надо присвоить результат) и почему копирование списков имеет подводные камни. Понимание этой разницы избавляет от загадочных багов.
Частые вопросы
Список изменяемый, а строка нет? Да: список меняют на месте, строку — только пересоздают.
Почему s.upper() не изменил строку? Строка неизменяема; сохраните результат: s = s.upper().
Начать игру бесплатно