Python неизменные параметры по умолчанию

'What You Wrote: '
def append_to(element, to=[]):
    to.append(element)
    return to
'What You Might Have Expected to Happen: '
my_list = append_to(12)
print(my_list)

my_other_list = append_to(42)
print(my_other_list)
#OUTPUT
[12]
[42]

'What Actually Happens'
[12]
[12, 42]

'''
Python’s default arguments are evaluated once when the 
function is defined, not each time the function is called 
(like it is in say, Ruby). This means that if you use a mutable 
default argument and mutate it, you will and have mutated that 
object for all future calls to the function as well.
'''

'''
What You Should Do Instead
Create a new object each time the function is called, 
by using a default arg to signal that no argument was provided 
(None is often a good choice).
'''
def append_to(element, to=None):
    if to is None:
        to = []
    to.append(element)
    return to
Matthew Edelen