代码之家  ›  专栏  ›  技术社区  ›  E.K.

Python内存块[复制]

  •  0
  • E.K.  · 技术社区  · 6 年前

    我看到了 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 回复  |  直到 6 年前
        1
  •  1
  •   jedwards    6 年前

    所有局部变量 删除,但默认值为 l 不是函数体的本地,而是函数定义的一部分,在构造函数对象时初始化一次。

    所以在这里, 充当各种类型的“缓存”,利用列表的可变性。