Tuples and immutability

Terry Reedy tjreedy at udel.edu
Wed Mar 12 04:25:19 CET 2014

On 3/11/2014 10:01 PM, Rick Johnson wrote:
> On Thursday, February 27, 2014 4:18:01 PM UTC-6, Ian wrote:
>> x += y is meant to be equivalent, except possibly in-place and
>> more efficient, than x = x + y.

The manual actually says "An augmented assignment expression like x += 1 
can be rewritten as x = x + 1 to achieve a similar, but not exactly 
equal effect. In the augmented version, x is only evaluated once. Also, 
when possible, the actual operation is performed in-place, meaning that 
rather than creating a new object and assigning that to the target, the 
old object is modified instead.

> In an ideal world, the speed of these two codes should be the same,

Nope, 'similar' is not 'equivalent'. Evaluating x twice instead of once 
and possibly allocating a new object versus not take extra time. In a 
statement like "x.y.z[3*n+m] += 1", calculating the target dominates the 
time to increment, so this form should be nearly twice as fast.

Terry Jan Reedy

More information about the Python-list mailing list