Augmented Assignment (was: Re: PEP scepticism)

Guido van Rossum guido at python.org
Fri Jul 6 07:48:18 EDT 2001


Thomas Wouters <thomas at xs4all.net> writes:

> On Mon, Jul 02, 2001 at 02:00:51AM +0000, Rainer Deyke wrote:
> > An interesting (and AFAIK legal) optimization would be to make
> > tuples act as mutable objects with respect to augmented assignment
> > if their reference is 1.
> 
> But they are never 1 unless you're in a C extention that just created it.
> When you call 'x += y', the refcount for both x and y is always 2 when the
> arguments arrive at the __iadd__ (or C equivalent.)
> 
> So you mean '2'. But then you could run into trouble on, say,
> 
>   () += y
> 
> because the empty tuple is shared, just like interned strings and integers.
> The refcount *could* be 2, and you end up modifying someone else's empty
> tuple.

No, because "() += y" is syntactically illegal.

It wouldn't be a useful optimization anyway, because += on a tuple
would have to reallocate the tuple, which is tantamount to allocating
a new one anyway, thus losing most of the advantage.

--Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-list mailing list