Why is the empty dictionary a dangerous default value in Python? [duplicate] Why is the empty dictionary a dangerous default value in Python? [duplicate] python python

Why is the empty dictionary a dangerous default value in Python? [duplicate]


Let's look at an example:

def f(value, key, hash={}):    hash[value] = key    return hashprint(f('a', 1))print(f('b', 2))

Which you probably expect to output:

{'a': 1}{'b': 2}

But actually outputs:

{'a': 1}{'a': 1, 'b': 2}


It's dangerous only if your function will modify the argument. If you modify a default argument, it will persist until the next call, so your "empty" dict will start to contain values on calls other than the first one.

Yes, using None is both safe and conventional in such cases.