Each function in PHP has two contexts: Static and object. The method is a normal named function, which pre-announced both of these context. Thus we get that the method and the memory allocation for it, too, is one thing, but for different objects changes the context (i.e. reference to this), and then creating a new object is the only allocation of this context for the method, i.e. the stupid one address.
In addition, creating a new object the memory is not allocated at all. If the object is identical to the previous one, the address of the new object corresponds to the previous marked separation of the ZVAL structures if the mutations (to a certain time, even the bug was when the function spl_object_hash return the same string for two different objects that contain the same data). During the object change the reference to the changed field is divided, and the new value trying to take the memory of those variables (remember that the structure of a ZVAL common to all types of variables) that have been marked for destruction via GC (i.e. refcount=0), it allows you to get rid of unnecessary memory allocations. This pattern of behavior, for example, allows you to do the clone operator (clone) and instantiate (using the new operator) objects without any memory allocations at all.
P. S. So it was in some of 5.x branches, when I investigated the behavior of the blaze. Now when the nose 7.3 - I have XS, a lot has changed, although most work has been done to reduce memory consumption zval objects, DCE optimizations and AVX/SSE instructions, so don't think that much.