CLN: Use sentinel values instead of mutable default arguments
From [Quantified Code](https://www.quantifiedcode.com/):

Mutable list or dictionary used as default argument to a method or function. Python creates a single persistent object and uses it for every subsequent call in which the argument is left empty. This can cause problems if the program was expecting the function to return a new list or dictionary after every call. Use a sentinel value to denote an empty list or dictionary.
