You don't deal with object as an object, you have to look at it as a "reference" to a block of memory (the block of memory is the object)

It's just like using pointers in C/C++, you can't change the value the pointer holds but you can change the content of the memory block it points to... But if you want to modify the pointer itself, you pass a pointer to the pointer, so now you can change the content of both the pointer and what it points at.

It's the same in Object Oriented Methodology, Objects are references, you can do whatever you want to what they point to, but you can't change the value inside the reference (re-instantiate), if you want to do that, you'll have to use a reference of the reference (ref Object)

I hope that made sense to you