Imagine the following scenario. All objects of type T are copyable. There are wrapper-objects that may contain references to many objects of type T or any extending class of T. Now all objects are contained in a state, and when any wrapper-object is used to modify said state, the state is copied beforehand. The problem is that the wrapper-objects point to the original states objects instead of the objects in the copied state thus making any modifications in regards to the objects contained in the wrapper-objects modify the original state instead of the copied state.
Is there any simple way to overcome this?
Example:
class A extends T {
  private int value;
  public A(int value) {
     this.value = value;
  }
  public int getValue() {
     return value;
  }
  public void setValue(int toSet) {
     this.value = toSet;
  }
  @Override
  public A copy() {
     return A(this.value); //Imagine deep-copy stuff here
  }
}
Now imagine a State that has a list of those A:
class Modification {
    A toModify;
    int toSet;
}
class State {
     List<A> objs = ...; // Some A's
     private State(State otherState) {
        //Deep-copy is done here...
        //Copy all A's that are contained in this state too
     }
     public State applyAModification(Modification mod) {
          State copy = new State(this);
          //now I want to modify the A that was referenced in mod
          //not the original, but the copy in the copied state
          return copy;
     }
}
Update: May someone point me into a direction or point on some keywords I may search for ? This question seems to be very specific, but even after trying to solve this problem for many hours there seems to be no real solution.
EDIT: Excuse all the typos, duh
                        
One possible solution is to maintain versions of the class A or any subclasses inside it, rather than creating copies from outside. For example:
So in the end you are still dealing wih only 1 reference to A. It will also encapsulate the complexity of creating copies on every mutation inside the respective class.