为什么 locals()['var_name'] = value 会影响实际的本地命名空间?

Why does locals()['var_name'] = value affect the actual local namespace?

提问人:NKUwakwe 提问时间:1/16/2022 最后编辑:NKUwakwe 更新时间:1/16/2022 访问量:87

问:

def f():
    s = 'foo'
    loc = locals()

    loc['s'] = 'bar'
    print(s)

    loc['z'] = 'baz'
    print(locals())

f()

我知道 locals 函数返回本地命名空间的副本。这就是为什么 s 的值不会在实际的本地命名空间中被修改的原因。如果是这样的话,那么为什么要查找的额外键值对会影响实际的本地命名空间呢?

Python 函数 作用域 空间 本地

评论

1赞 buran 1/16/2022
您是否阅读了文档中的注释 不应修改此词典的内容; 更改可能不会影响解释器使用的局部变量和自由变量的值。 也就是说,你的推理首先是不正确的
0赞 juanpa.arrivillaga 1/16/2022
它没有,试试print(z)
0赞 user3840170 1/16/2022
@juanpa.阿里维拉加__import__('dis').dis(lambda: z)
0赞 juanpa.arrivillaga 1/16/2022
@user3840170什么?

答: 暂无答案