list as default value in class __init__() - watchout for surprise
Note to self: don't use list as a default value in class methods if its going to be modified later, as it might cause some trouble. Just realized something: In [1]: class MyClass(object): ...: def __init__(self,data=[]): ...: self.data = data ...: ...: def addData(self,value): ...: self.data.append(value) ...: ...: In [2]: obj = MyClass() In [3]: obj.addData('hello') In [4]: obj.data Out[4]: ['hello'] In [5]: obj2 = MyClass() In [6]: obj2.data Out[6]: ['hello'] In [7]: obj3 = MyClass([]) In [8]: obj3.data Out[8]: [] In [12]: def myfunc(val,data=[]): ....: data.append(val) ....: return data ....: In [13]: myfunc(1) Out[13]: [1] In [14]: myfunc(2) Out[14]: [1, 2] In [15]: myfunc(3) Out[15]: [1, 2, 3] At first i thought its a bug/weirdness, but after banging my head a bit to wall and a long stare at the ceiling, it made sense. During class definition, the