Итак, насколько я понимаю, когда вы передаете копию сообщения в массив, выполняется поверхностная копия.Два объекта должны указывать на один и тот же массив, и теоретически, когда вы меняете один, вы меняете другой.
Это ваша ошибка.Это правда, что копия будет производить мелкую копию, но ваше представление о мелкой копии неверно.Малая копия даст вам новый экземпляр объекта, но все переменные экземпляра будут продолжать указывать на одни и те же объекты.Фактически вы создаете только один новый объект.
Если вы хотите, чтобы переменные 'a' и 'b' указывали на один и тот же объект, все, что вы делаете, это назначаете их друг другу:
b := a.
Это позволит вам изменить «b», и эти изменения также повлияют на «a».
Чтобы расширить эту концепцию, у вас есть понятие deepCopy, deepDeepCopy и т. Д. Идея этих изменений заключается в том, что онитакже создайте новые объекты для переменных экземпляра.
Технически, индексированные объекты, такие как Array, OrderedCollection, String и т. д., не используют переменные экземпляра, но концепция та же - deepCopy дублирует объекты, на которые указываетскопированный объектdeepDeepCopy перешел бы на другой уровень и дублировал бы и те объекты, на которые указывает указатель.