Steven D'Aprano wrote: > On Tue, 09 Oct 2007 19:23:37 +0200, Diez B. Roggisch wrote: > > >> Your believes aside, this is simply wrong. The statement >> >> a += x >> >> always leads to a rebinding of a to the result of the operation +. >> > > Not true. > Hmm. Or you can write __iadd__ to rebind the name to the same object again? I think usually there is not much difference between "rebinding to the same object" and "not rebinding". But as we have seen, sometimes there is a difference. I think that Diez made his statement because it is possible to rebind from __iadd__ to a different object. So it is more safe to think that "inplace operations" will always rebind, than to think they will never rebind.
I'm not sure about the language level. It is told that "+=" is an inplace operator, but how "in place" is defined? If we say "an inplace operator will change the state of an object, and will never create a new object" then "+=" is NOT an inplace operator. Well, at least not when you watch it from the language level. But what about the implementation level? Here is an example: a = 1 a+= 1 # The compiler will probably optimize this and the Python bytecode interpreter will not rebind 'a' here, just increment the integer in memory. This topic starts to be very interesting. Language lawyers and developers, please help us! How "in place operator" is defined in Python? What makes it an "in place operator"? Is it the syntax, or what? Laszlo -- http://mail.python.org/mailman/listinfo/python-list