In Python default argument values are evaluated once upon module load.
This means that if all_numbers is not provided in the example below, it keeps appending to the same default list that was initiated when the program started!
Another datetime example: https://gist.github.com/pybites/749358550803b24018b15cf7dab04b21
>>> def sum_numbers(number, all_numbers=[]):
... all_numbers.append(number)
... return sum(all_numbers)
...
>>> sum_numbers(1, [2, 3])
6
>>> sum_numbers(1)
1
>>> sum_numbers(2) # oops, should return 2!
3
>>> def sum_numbers(number, all_numbers=None):
... if all_numbers is None:
... all_numbers = []
... all_numbers.append(number)
... return sum(all_numbers)
...
>>> sum_numbers(1)
1
# ok now
>>> sum_numbers(2)
2
>>> sum_numbers(3)
3
#functions #anti-patterns