Почему строки и кортежи в Python являются неизменяемыми?
Я не совсем понимаю, почему строки и кортежи были сделаны неизменяемыми. Какие преимущества и недостатки имеет их неизменяемость?
5 ответ(ов)
Есть несколько причин, по которым строки в Python являются неизменяемыми. Прежде всего, это связано с производительностью: понимание того, что строка неизменяема, позволяет легко выделять память во время ее создания, поскольку требования к хранению фиксированы и не меняются. Это также одна из причин различия между кортежами и списками. Кроме того, такая реализация позволяет безопасно повторно использовать объекты строк. Например, в реализации CPython используются заранее выделенные объекты для строк с одним символом, и чаще всего возвращается исходная строка для операций, которые не изменяют ее содержимое.
Еще одной причиной является то, что строки в Python считаются "элементами" наравне с числами. Никакое количество действий не изменит значение 8 на что-то другое, и в Python никакое количество действий не изменит строку “eight” на что-то иное.
Одно из больших преимуществ использования неизменяемых объектов заключается в том, что их можно использовать в качестве ключей в словаре. Я уверен, что внутренние структуры данных, используемые в словарях, могли бы сильно испортиться, если бы ключи могли изменяться.
Иммутируемые типы концептуально значительно проще, чем изменяемые. Например, в отличие от C++, вам не нужно заморачиваться с конструкторами копирования или корректностью const. Чем больше типов является иммутируемыми, тем проще становится язык. Поэтому самые простые языки — это чисто функциональные, в которых отсутствует глобальное состояние. Это объясняется тем, что лямбда-исчисление проще, чем машины Тьюринга, хотя при этом оно столь же мощное. Однако многие люди, похоже, не ценят это.
Перл имеет изменяемые строки и, кажется, работает вполне нормально. Ваше объяснение выглядит как попытка оправдать произвольное решение в дизайне языка.
На вопрос, почему в Python используются неизменяемые строки, можно ответить, что создатель языка Гвидо ван Россум хотел этого, и теперь у него есть множество поклонников, которые defend его произвольное решение до последнего вздоха.
Можно задать аналогичный вопрос, почему в Перле нет неизменяемых строк, и многие люди начнут описывать, как ужасна сама концепция неизменяемых строк, а также расскажут, почему отсутствие таковых — это просто невероятная идея (TM), превосходящая все ожидания.
Плюсы: высокая производительность.
Минусы: нельзя изменять изменяемые объекты.
Есть ли в Python метод подстроки 'contains' для строк?
Как перевернуть строку в Python?
Вывод строки в текстовый файл
Как заполнить строку в Python пробелами?
Диапазон букв в Python