Python内存块

时间:2018-10-31 17:04:51

标签: python

我看到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]

1 个答案:

答案 0 :(得分:1)

所有局部变量 do 被清除,但是l的默认值不是函数主体的局部变量,而是函数定义的一部分,当函数对象为构造的。

因此,l在这里用作列表的可变性的各种“缓存”。