inconsistency with += between different types ?

Christopher A. Craig list-python at
Wed Aug 7 21:59:16 CEST 2002

Andreas.Leitgeb at (Andreas Leitgeb) writes:

> > So what? Immutable objects don't have to implement __iadd__ et al. at
> > all and in fact ints don't have __iadd__. Python falls back to calling
> > __add__ and normal assignment automatically.
> That's exactly what I meant.
> For immutable objects, __iadd__ et al. simply make no sense (IMHO).

Now that I understand your problem, I would not oppose this solution.
(I wouldn't really support it either because I don't actually see a
problem since I have yet to see someone actually try to define an
__iadd__ that doesn't return self.)  My confusion came in that I
recalled back to your original post (quoted below) and expected that
you were trying to fix that, which this doesn't since neither integers
nor strings define __iadd__:

> --- snip ---
> def f(x,y): x+=y
> d='foo';     f(d,'bar');   print d    #  ->  'foo'
> i=4;         f(i,2);       print i    #  ->  4
> #but:
> l=[1,2,3];   f(l,[7,8,9]); print l    #  ->  [1, 2, 3, 7, 8, 9]
> --- snip ---
> It seems that  lists are the only type, where the changes get visible
> outside, although I'd have expected all types to behave as lists do.

Christopher A. Craig <list-python at>
"May the source be with you."  -- Open Source Software mantra

More information about the Python-list mailing list