python class instantiation

Éric Daigneault lists daigno at gmail.com
Mon Oct 23 22:56:01 CEST 2006


Got a question for you all...

I noticed a behaviour in python class creation that is strange, to say 
the least.

When creating a class with data members but no __init__ method.  Python 
deals differently with data members that are muatable and immutables.

Ex:
class A(object):
    stringData = "Whatever"
    listData = []

instance = A()

Will have data members instantiated as expected (instance.stringData == 
"Whatever" and instance.listData == [])

instance.listData.append("SomeString")
instance.stringData = "Changed"

Now if I do

secondInstance = A()

it will come with the listData containing the SomeString appended to the 
instance...

this is clearly not normal

Especially that the stringData of Second instance contains the 
"Whatever" text.  If the behaviour was at least consistant...  but it is 
not...

Am I coing nuts or is this by desing, if so it is very misleading...  
The two instances are sharing the same list, but not the same string 
...  I did not declare the list to be static in any way....  Why does it 
behave like this ?

Éric



More information about the Python-list mailing list