对象变动(Mutation)

    刚刚发生了什么?我们预期的不是那样!我们期望看到是这样的:

    1. print(foo)
    2. # Output: ['hi']
    3. bar = foo
    4. bar += ['bye']
    5. print(foo)
    6. # Output: ['hi']

    你可能预期它表现的不是这样子。你可能希望,当你调用add_to时,有一个新的列表被创建,就像这样:

    1. def add_to(num, target=[]):
    2. target.append(num)
    3. return target
    4. add_to(1)
    5. # Output: [1]
    6. add_to(2)
    7. # Output: [2]
    8. add_to(3)
    9. # Output: [3]

    现在每当你在调用这个函数不传入target参数的时候,一个新的列表会被创建。举个例子:

    1. add_to(42)
    2. # Output: [42]
    3. add_to(42)
    4. # Output: [42]
    5. add_to(42)