>>> def spammer(bag=[]):
... bag.append("spam")
... return bag
...
>>> spammer()
['spam']
>>> spammer()
['spam', 'spam']
>>> spammer()
['spam', 'spam', 'spam']
>>>
Man ruft spammer ohne den optionalen Parameter auf und würde eigentlich erwarten, dass der Defaultwert eingesetzt wird, so wie es beim ersten Aufruf geschieht!
Erklärung: Der Default-Wert wird nur bei der Definition der Funktion zugewiesen nicht mehr beim Aufruf. Danach wird immer wieder auf die gleiche sich verändernde Liste zugegriffen.