0

Почему строки и кортежи в Python являются неизменяемыми?

27

Я не совсем понимаю, почему строки и кортежи были сделаны неизменяемыми. Какие преимущества и недостатки имеет их неизменяемость?

5 ответ(ов)

0

Есть несколько причин, по которым строки в Python являются неизменяемыми. Прежде всего, это связано с производительностью: понимание того, что строка неизменяема, позволяет легко выделять память во время ее создания, поскольку требования к хранению фиксированы и не меняются. Это также одна из причин различия между кортежами и списками. Кроме того, такая реализация позволяет безопасно повторно использовать объекты строк. Например, в реализации CPython используются заранее выделенные объекты для строк с одним символом, и чаще всего возвращается исходная строка для операций, которые не изменяют ее содержимое.

Еще одной причиной является то, что строки в Python считаются "элементами" наравне с числами. Никакое количество действий не изменит значение 8 на что-то другое, и в Python никакое количество действий не изменит строку “eight” на что-то иное.

0

Одно из больших преимуществ использования неизменяемых объектов заключается в том, что их можно использовать в качестве ключей в словаре. Я уверен, что внутренние структуры данных, используемые в словарях, могли бы сильно испортиться, если бы ключи могли изменяться.

0

Иммутируемые типы концептуально значительно проще, чем изменяемые. Например, в отличие от C++, вам не нужно заморачиваться с конструкторами копирования или корректностью const. Чем больше типов является иммутируемыми, тем проще становится язык. Поэтому самые простые языки — это чисто функциональные, в которых отсутствует глобальное состояние. Это объясняется тем, что лямбда-исчисление проще, чем машины Тьюринга, хотя при этом оно столь же мощное. Однако многие люди, похоже, не ценят это.

0

Перл имеет изменяемые строки и, кажется, работает вполне нормально. Ваше объяснение выглядит как попытка оправдать произвольное решение в дизайне языка.

На вопрос, почему в Python используются неизменяемые строки, можно ответить, что создатель языка Гвидо ван Россум хотел этого, и теперь у него есть множество поклонников, которые defend его произвольное решение до последнего вздоха.

Можно задать аналогичный вопрос, почему в Перле нет неизменяемых строк, и многие люди начнут описывать, как ужасна сама концепция неизменяемых строк, а также расскажут, почему отсутствие таковых — это просто невероятная идея (TM), превосходящая все ожидания.

0

Плюсы: высокая производительность.

Минусы: нельзя изменять изменяемые объекты.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь