Ответ 1
Если этот сложный объект изменен или содержит изменяемые части, то решение такое же, как в Java. Проверьте вопросы Java и сообщения об этом и сделайте это.
Если все неизменно, то вам не нужно и не нужно клонировать что-либо. В лучшем случае вы должны сделать мелкую копию объекта, изменяя только поля, которые нужно изменить, и, в худшем случае, вы используете что-то вроде линз или застежек-молний, чтобы скопировать какой-то глубокий объект и распространить изменение вверх. См. Вопросы о Scala об объективах и молниях для этого.