how are strings immutable in python?
Terry Reedy
tjreedy at udel.edu
Sun Jul 6 16:50:33 EDT 2008
Peter Otten wrote:
> ssecorp wrote:
>
>>>>> h = "aja baja"
>>>>> h += 'e'
>>>>> h
>> 'aja bajae'
>
> The inplace-add operator doesn't mutate the lvalue, it just rebinds it:
In Python, neither '=' nor members of the 'op=' family are operators.
They all mark *assignment* or *augmented assignment* statements that
*all* bind objects to targets.
Augmented assignments are, rather obviously, restricted to binding one
object to one target. For 'x op= y', if the object originally bound to
x is mutable, the arithmetic operation part of the augmented assignment
can (should) be implemented by an inplace __i<opname>__ special method
that (normally, but not necessarily) mutates and returns self to be
rebound. Otherwise, the interpreter calls the normal __<opname>__
special method (if it exits) that returns a new object to be bound.
Thus, '+=' is neither an operator nor is the indicated operation
necessarily inplace.
Immutable built-in classes do not have __i<opname>__ methods. So given
that name h is bound to a string,
h += 'e'
has exactly the same effect as
h = h + 'e'
which has exactly the same effect as
h = h.__add__('e')
The same is true for immutable instances of other built-in classes.
Terry Jan Reedy
More information about the Python-list
mailing list