问题描述
我已经在控制台中尝试了以下操作:
>>> def f(l=[]):
... l.append(1)
... print(l)
... del l
...
>>> f()
[1]
>>> f()
[1,1]
我不明白的是,在删除指令之后,解释器仍如何能够找到相同的列表l
。
l=[]
中的文档仅应评估一次。
解决方法
变量不是对象。每次调用该函数时,都会创建局部变量l
并将其(如有必要)设置为默认值。
对象[]
是l
的默认值,是在定义函数时创建的,但是变量l
则在函数每次运行时创建。
要删除列表中的元素,应使用del l[:]
。如果您仅使用l
,列表将保留不变。
def f(l=[]):
l.append(1)
print(l)
del l[:]
print(l)
>>> f()
[1] #element in the list
[] #list after deletion of the element
>>> f()
[1]
[]
>>> f()
[1]
[]