> I've got a big object that holds references to other objects which,
> in turn, hold references to other objects, which.....
>
> Now I change this object, but need a possibility to revert the change. This
> could be achieved by deep-copying the object, but that's too expensive
> (changes are mostly minor and 99% copy operations will be redundant).
From your description it's not really clear what the class is doing(does it 
has methods to perform operations, or it provide access to the other objects 
via attributes?).

In anycase, what you can possibly do is to define some sort of "transaction" 
flag, so when raised, the object's method will create copies of the relevant 
objects on-demand(and keep references to the old ones).

Then either you commit the transaction, or rollback to the previous state.