To clarify how Python handles two equal objects

Roel Schroeven roel at roelschroeven.net
Wed Jan 11 12:13:44 EST 2023


Op 11/01/2023 om 16:33 schreef Jen Kris via Python-list:
> Yes, I did understand that.  In your example, "a" and "b" are the same pointer, so an operation on one is an operation on the other (because they’re the same memory block).

Sorry if you feel I'm being overly pedantic, but your explanation "an 
operation on one is an operation on the other (because they’re the same 
memory block)" still feels a bit misguided. "One" and "other" still make 
it sound like there are two objects, and "an operation on one" and "an 
operation on the other" make it sound like there are two operations.
Sometimes it doesn't matter if we're a bit sloppy for sake of simplicity 
or convenience, sometimes we really need to be precise. I think this is 
a case where we need to be precise.

So, to be precise: there is only one object, with possible multiple 
names to it. We can change the object, using one of the names. That is 
one and only one operation on one and only one object. Since the 
different names refer to the same object, that change will of course be 
visible through all of them.
Note that 'name' in that sentence doesn't just refer to variables (mx1, 
arr1, ...) but also things like indexed lists (mx1[0], mx1[[0][0], ...), 
loop variables, function arguments.

The correct mental model is important here, and I do think you're on 
track or very close to it, but the way you phrase things does give me 
that nagging feeling that you still might be just a bit off.

-- 
"Peace cannot be kept by force. It can only be achieved through understanding."
         -- Albert Einstein



More information about the Python-list mailing list