Итак ... что мне с этим делать? Перезаписать, какая переменная ссылалась на старый банковский счет?
Да
Если да, то имеет ли это преимущества перед подходом ООП с изменением состояния?
Скажем, вычисление того, какое действие вы выполняете над этой структурой, занимает много времени, и что-то происходит на полпути, и вам нужно вернуться к исходной структуре, или вычисление вызвало ошибку. С учетом того, что вы представили мне OO (используя ссылку, потому что у вас может быть неизменный язык OO), что данные могут быть повреждены - это неизвестно, если не получено достаточно информации от вызова функции с ошибкой, и давайте предположим, что она не сработала плохо. При функциональном подходе вы точно знаете, что ваша исходная структура данных правильная, потому что вы изначально сделали копию.
Расширить этот сценарий в многопоточных приложениях. Мы можем гарантировать, что никто другой не использует структуру данных, которой мы являемся, поскольку у всех нас есть своя собственная версия.
Кроме того, мы можем сэкономить место, используя данные из другой структуры, из которой мы копируем. Классический пример - при добавлении элемента в начало списка. Если у нас есть указатель на второй элемент и указатель на первый элемент, мы можем ссылаться на оба списка только с размером первого (см. Ниже). Без неизменности мы не можем этого гарантировать.
b__
|
a -> [6|] -+-> [5|] -> [4|] -> [3|] -> [2|] -> [1|x]