Tip: Watch out for mutable default arguments in Python

Default arguments in Python are evaluated only once. The evaluation happens when the function is defined, instead of every time the function is called. This can inadvertently create hidden shared state, if you use a mutable default argument and mutate …


This content originally appeared on DEV Community and was authored by Isabelle M.

Default arguments in Python are evaluated only once. The evaluation happens when the function is defined, instead of every time the function is called. This can inadvertently create hidden shared state, if you use a mutable default argument and mutate it at some point. This means that the mutated argument is now the default for all future calls to the function as well.

Take the following code as an example. Every call to the function shares the same list. So, the second time it's called, the function doesn't start out with an empty list. Instead, the default argument is the list containing the value from the previous call.

def append(n, l = []):
  l.append(n)
  return l

append(0) # [0]
append(1) # [0, 1]

If you absolutely need to use a mutable object as the default value in a function, you can set the default value of the argument to None instead. Then, checking in the function body if it is None, you can set it to the mutable value you want without side effects.

def append(n, l = None):
  if l is None:
    l = []
  l.append(n)
  return l

append(0) # [0]
append(1) # [1]

Do you like short, high-quality code snippets and articles? So do we! Visit 30 seconds of code for more articles like this one or follow us on Twitter for daily JavaScript, React and Python snippets! 👨‍💻


This content originally appeared on DEV Community and was authored by Isabelle M.


Print Share Comment Cite Upload Translate Updates
APA

Isabelle M. | Sciencx (2022-04-05T14:07:56+00:00) Tip: Watch out for mutable default arguments in Python. Retrieved from https://www.scien.cx/2022/04/05/tip-watch-out-for-mutable-default-arguments-in-python-2/

MLA
" » Tip: Watch out for mutable default arguments in Python." Isabelle M. | Sciencx - Tuesday April 5, 2022, https://www.scien.cx/2022/04/05/tip-watch-out-for-mutable-default-arguments-in-python-2/
HARVARD
Isabelle M. | Sciencx Tuesday April 5, 2022 » Tip: Watch out for mutable default arguments in Python., viewed ,<https://www.scien.cx/2022/04/05/tip-watch-out-for-mutable-default-arguments-in-python-2/>
VANCOUVER
Isabelle M. | Sciencx - » Tip: Watch out for mutable default arguments in Python. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/04/05/tip-watch-out-for-mutable-default-arguments-in-python-2/
CHICAGO
" » Tip: Watch out for mutable default arguments in Python." Isabelle M. | Sciencx - Accessed . https://www.scien.cx/2022/04/05/tip-watch-out-for-mutable-default-arguments-in-python-2/
IEEE
" » Tip: Watch out for mutable default arguments in Python." Isabelle M. | Sciencx [Online]. Available: https://www.scien.cx/2022/04/05/tip-watch-out-for-mutable-default-arguments-in-python-2/. [Accessed: ]
rf:citation
» Tip: Watch out for mutable default arguments in Python | Isabelle M. | Sciencx | https://www.scien.cx/2022/04/05/tip-watch-out-for-mutable-default-arguments-in-python-2/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.