Static variable vs Class variable

Laszlo Nagy gandalf at shopzeus.com
Tue Oct 9 15:25:38 EDT 2007


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




More information about the Python-list mailing list