The accepted answer in the other question briefly explains the copy constructor and, yes, this pattern will create new objects and can (should!) be used to create those snapshots.
The new object will get the current state of the original object. Which is easy for strings and java primitives.
For objects, it's more tricky: the current state is a pointer to another object, and if this other objects changes, the changes will be reflected in your snapshot. If you need to avoid that, then you have to clone these objects too (deep cloning).
The "Problem" with cloning via copy constructor: the cloneable classes need to provide such a constructor. Easy, if you own the source code - then you can implement it yourself. Otherwise you may have to play with Reflection API and implement a clone factory which would be at least ... err, challenging.