我有一个关于默认参数的问题。也就是说,通过
>>> def foo(my_list=[]):
... my_list.append(1)
... return my_list
...
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]
>>>
我明白为什么会这样(我们将把这种行为的合理性问题留在范围之外)
我是否正确理解,如果您使用这样的默认列表调用一次函数,在哪里用 GB 的数据填充它,返回它,使用它然后忘记它,那么由于以下事实,内存仍将保留默认 [] 被钉在 def foo 上?
默认参数在 foo 函数定义的位置创建一次并存储在其中,它只是一个常规变量,您无需调用 foo() 即可访问
如果您要默认创建一个千兆字节大小的不可变参数,那么当再次调用 foo 时它不应该重置为零,这就是它的意义,以存储相同的数据。那么为什么要释放 my_list 呢?
不同之处在于此参数是否可变,当调用 foo 时,将创建一个新的(如果不可变,例如 tupple)my_list 或更新相同的(如果可变)my_list
您可以通过删除存储 my_list 的 foo 对象或通过重置 my_list 本身来重置它