Wenn ich das richtig sehe, dann hängst du an dem Problem jeder 'höheren' Programmiersprache - nämlich wie tief muß man kopieren.
Mal leicht philosophisch abgegleitet - in die Sprache 'Smalltalk':
Bei einem 'deepcopy' wird eine echte Kopie angelegt, bei einem 'shallowcopy' nur eine Referenz.
Wir hatten auf der Uni immer das Problem, daß wir was zwischen den beiden brauchten, und dabei sind eine Unmenge an angepassten Copys entstanden. Eine bessere Lösung haben wir nicht gefunden.
Fazit: Wenn du also eine Lösung für dein Problem suchst - es gibt wohl keinen anderen Weg als denn steinigen welchen...