Éric Daigneault wrote: >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 This is not what I get : Here is the code and the output for 2.5 class A(object): stringData = "Whatever" listData = []
inst = A() print inst.stringData print inst.listData print inst.listData.append("SomeString") inst.stringData = "Changed" inst2 = A() print inst2.stringData print inst2.listData print inst.listData.append("NewThing") inst.stringData = "NewChanged" print inst.stringData print inst.listData print inst.stringData print inst.listData print ----- Whatever [] Whatever ['SomeString'] NewChanged ['SomeString', 'NewThing'] NewChanged ['SomeString', 'NewThing'] Isn't this what you got? -Chetan -- http://mail.python.org/mailman/listinfo/python-list