This code:
#!/usr/bin/python3
class Test:
def __init__(self, items=[]):
self.items = items
def add(self, item):
self.items.append(item)
a = Test()
a.add("foo")
b = Test()
b.add("bar")
print(repr(a.items))
print(repr(b.items))
"obviously" prints:
['foo', 'bar']
['foo', 'bar']
Because the default value of the items
argument is a mutable list constructed
just once when the code is
compiled when the function definition is evaluated, and then reused.
So, in Python, mutable items in default arguments are a good way to get more fun time with debugging.