About Function Defaults

Never use mutable default values in the function arguments.

This is wrong, because the initial default list and dictionary values might be unexpectedly changed with each function call:

1
2
def do_something(my_list=[], my_dict={}):
    # ...

This is better, because each function call will assign the default list and dictionary values within the function:

1
2
3
4
5
6
def do_something(my_list=None, my_dict=None):
    if my_list is None:
        my_list = []
    if my_dict is None:
        my_dict = {}
    # ...

Tips and Tricks Programming Python 3