Clarification on Immutability please
Daniel Haude
dhaude at posteo.de
Tue Jan 28 05:33:24 EST 2020
Am 27.01.2020 15:23 schrieb Chris Angelico:
> The way execution works in Python, you first evaluate the object, then
> assign it to the target. The new object HAS to exist before the old
> one is replaced. There's no such thing as "atomic reassignment" that
> simultaneously destroys the old object and assigns a new one. The
> slicing will always happen first, and then the assignment.
Hi Chris,
I agree that that is how it's done because it makes sense. My completely
academic question is this: If the Python compiler sees that the
operation effectively just chops a few items off the end of a tuple
which will be immediately discarded I can't see an issue with an
implementation simply shortening the length of the tuple. In C this
would be an ultra cheap operation, and the pointer to the tuple object
(CPython's object ID) would indeed not change. A possible drawback would
be waste of memory because the unused tuple items are still around in
allocated memory.
The introductory comment in tupleobject.h is clear on this subject:
"[...] C code can change the tuple items (but not their number) [...]",
so this is not how it's done in CPython 3.8.0, but IMO an implementation
could legally do this.
All this is beside the point of the OP's question. There is no
connection between an object's mutability and its ID.
More information about the Python-list
mailing list