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