For the Devs - Are Object variables assigned by reference or by value?

I have noticed in the past that there were instances where if I assigned a generic Object variable with no schema (variable1) = another Object variable with a defined schema (variable2), that any changes I made to Object variable1 would also reflect in Object variable2, like a pointer or Reference.

However sometimes it is more desirable to just create a Copy of the Object variable, so that changes made to the Copy would not affect the original. This would be assignment by Value.

I would like to know what the intended behavior in Appgyver is when we set one Object variable = to another variable, and if there is some way we can actually control whether the assignment is by reference (pointer) or by value (copy).