Если я правильно понял, оператор = не приводит к созданию нового объект, а добавляет еще одно имя для уже существуюшего.
А как сделать новый объект, который изначально содержал бы те же значения полей что и исходный, но дальнейшее изменение значений полей у нового объекта ни как не влияло на исходный объект и наоборот изменение исходного объекта не сказывалось на новом ??