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