История изменений
Исправление monk, (текущая версия) :
т.е. то, что переменная var изменилась? А как же с неизменностью переменных?
Если ты пишешь var = ...
или var += ...
, то переменная меняется. Если ты пишешь f(var)
, то переменная не меняется.
А в питоне это все скрыто, вот вам переменная, и не думайте, но работает она вот так или вот так, а может еще и так.
Там также всё открыто. Любая переменная содержит (семантически) ссылку на объект. При выполнении любой функции всегда передаётся эта ссылка (но не переменная!). Если объект изменяемый, то при помощи этой ссылки можно изменить содержимое объекта, если неизменяемый, то нет. Всё единообразно. А не так, что если передаёшь значение строки или массива в старом стиле, то они изменяются, так как это указатели, а если в новом через STL, то не изменяются, так как будет копирование объекта. Причём даже если передашь старый тип, а в описании функции STL, то тоже будет копирование объекта. Вплоть до того, что при передаче по ссылке тоже может не меняться.
Исходная версия monk, :
т.е. то, что переменная var изменилась? А как же с неизменностью переменных?
Если ты пишешь var = ...
или var += ...
, то переменная меняется. Если ты пишешь f(var)
, то переменная не меняется.
А в питоне это все скрыто, вот вам переменная, и не думайте, но работает она вот так или вот так, а может еще и так.
Там также всё открыто. Любая переменная содержит (семантически) ссылку на объект. При выполнении любой функции всегда передаётся эта ссылка (но не переменная!). Если объект изменяемый, то при помощи этой ссылки можно изменить содержимое объекта, если неизменяемый, то нет. Всё единообразно. А не так, что если передаёшь значение строки или массива в старом стиле, то они изменяются, так как это указатели, а если в новом через STL, то не изменяются, так как будет копирование объекта. Причём даже если передашь старый тип, а в описании функции STL, то тоже будет копирование объекта.