我看到this blog post展示了一个有趣的Python内存块行为。我仔细阅读了说明,但仍然不确定。
def f(x,l=[]):
for i in range(x):
l.append(i*i)
print(l)
f(2)
f(3)
打印
[0, 1]
[0, 1, 0, 1, 4]
为什么下面没有这些?完成f(2)
之后,l
会在哪里缓存?我以为所有局部变量都会被清除掉。
[0, 1]
[0, 1, 4]
答案 0 :(得分:1)
所有局部变量 do 被清除,但是l
的默认值不是函数主体的局部变量,而是函数定义的一部分,当函数对象为构造的。
因此,l
在这里用作列表的可变性的各种“缓存”。