Alan Franzoni <[EMAIL PROTECTED]> wrote:

> Yeah, that's right, it could have semantic differences, but that
> shouldn't be the case anyway. I mean, if I don't define an __iadd__
> method, writing 
> 
> a += n
> 
> or
> 
> a = a + n
> 
> is just the same, right?
> 
> 
> So, if I bother to define an __iadd__ method, I should make sure it
> works just the same, or I would introduce a very strange and
> hard-to-understand behaviour.
> 

If a is mutable and has an appropriate __iadd__ method which mutates it 
then the first of those will mutate the original object and the second 
will create a new object. That might not matter much if 'a' is the only 
name referring to the object, but if there are any other ways to access 
it then it will matter.

Compare:
>>> lst = [1, 2, 3]
>>> n = ['oops']
>>> a = lst
>>> a = a + n
>>> a
[1, 2, 3, 'oops']
>>> lst
[1, 2, 3]

>>> lst = [1, 2, 3]
>>> n = ['oops']
>>> a = lst
>>> a += n
>>> a
[1, 2, 3, 'oops']
>>> lst
[1, 2, 3, 'oops']
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to