It doesn't work like that, it doesn't change the original object in any way.
Think of it like this. Let's consider moving to China, and working for a Chinese company, that will only pay your salary to a Chinese bank account in a Chinese bank.
So, you need to get a Chinese bank account. Problem is, that the bank you want to use, doesn't speak english, so you have a problem.
What you could do, if this was available, would be to call up a proxy service, a translator service, that on your behalf, calls the bank. Anything you say to this proxy person, will be translated to chinese, and said to the bank official. Anything he/she responds with in chinese will be translated back to english, and spoken to you.
In effect, you can now do something along the communication line when talking to your bank.
However, it does not make your bank officials speak english.
The proxy object, from your example, does not modify the underlying object. Whenever you call methods on your proxy objects, they will in turn call methods on the underlying object, possible doing processing along the way.
But if you sidestep the proxy object, nothing has changed.