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.