首页 > 解决方案 > python内部函数以不同方式对待可变变量和不可变变量

问题描述

我试图理解为什么内部函数可以访问外部列表(arr)而不是外部布尔变量(找到)。

def outer():
    arr = [1, 2, 3]
    found = False
    print("outer func ids: ", id(arr), id(found))
    def inner(num):
        arr.append(4)
        found = True
        print("inner func ids:", id(arr), id(found))
    inner(3)
    print("outer func ids: ", id(arr), id(found))
    return found
outer()

输出:

('outer func ids: ', 4536180248, 140736008926072)
('inner func ids:', 4536180248, 140736008926048)
('outer func ids: ', 4536180248, 140736008926072)

有人可以澄清一下。即使我们在内部函数中执行附加操作,为什么列表具有相同的 id?

标签: python

解决方案


因为重新定义foundininner使它成为本地的。与可变与否无关。


推荐阅读