В C нет явного понятия неизменяемого, потому что язык основан на семантике копирования. Вместо этого в Python значения всегда передаются по ссылке, и неизменность играет важную роль для поддержания управляемости языка.
В Python у вас нет указателей, потому что все действительно является указателем! Представьте себе, что это может означать для программы на Python, что даже числовые объекты могут со временем менять значение ... вы будете вынуждены играть такие трюки, как
class Shape:
def __init__(self, points):
self.points = points[:] # make a copy of the list
не только для списков и надписей, но также для числовых значений и строк.
Так что в основном в Python некоторые типы имеют неизменяемые экземпляры, потому что они обычно используются в качестве «значений», а вас не волнует идентичность. В тех редких случаях, когда вам нужен, например, изменяемый объект с числовым значением, вам необходимо явно обернуть его, скажем, в экземпляр класса.
В других языках, в значительной степени основанных на эталонной семантике, такой как неизменность LISP, выбор остается за программистом, а не ограничением, даже если многие функции и идиомы поддерживают его (большой процент функций стандартной библиотеки LISP не является деструктивным, и это действительно так. Это позор, что деструктивные не всегда четко различимы по названию.
Так, например, строки являются изменяемыми LISP, но, вероятно, не многие программы LISP на самом деле модифицируют строки на месте, потому что это означало бы отказ от хорошей возможности совместного использования и потребовало бы явного копирования строк во многих местах (в большинстве случаев строки являются просто значениями, не объекты, в которых вы заботитесь о личности). Являются ли строки неизменяемыми в LISP? Нет. Программы меняют их? Почти никогда.
Не оставлять выбор программисту в духе языка Python. Приятно, когда решения, которые вы вынуждены делать, соответствуют вашей идее ... меньше решений и вещей точно так, как вы того хотели.
Однако, по моему мнению, при таком подходе есть две разные опасности:
Проблемы возникают, когда эти заранее сделанные выборы НЕ соответствуют тому, что вы хотели бы или должны сделать. Python - замечательный язык, но с другим диктатором может стать настоящий ад.
Понимание и принятие решений заставляет вас думать и расширять ваш разум. Вместо того, чтобы делать выбор, вы просто ставите клетку на ум, и через некоторое время вы можете даже не осознавать, что то, что вы используете, это ОДНА возможность, а не единственная возможность. Через некоторое время вы можете начать думать, что «все ДОЛЖНО быть сделано таким образом»: вы даже не чувствуете, что вас принуждают, потому что ваш ум уже «изуродован».