Python 闭包:为什么允许在闭包中更改字典,而不允许更改数字?
Python closure: Why changing dictionary in closure is allowed while changing numbers isn't?
当我尝试在闭包中更改字典时,此代码运行良好
def a():
x = {'a':'b'}
def b():
x['a'] = 'd'
print(x)
return b
>>> b = a()
>>> b()
{'a':'d'}
输出符合我的预期。但为什么下面的代码不起作用?
def m():
x = 1
def n():
x += 1
print(x)
return n
>>> n = m()
>>> n()
UnboundLocalError: 赋值前引用了局部变量'x'
老实说,我知道我们可以使用 nonlocal x
语句来解决这个问题
但是有人可以为我更深入地解释原因吗? 字典和数字有什么区别
谢谢!
当我尝试在闭包中更改字典时,此代码运行良好
def a():
x = {'a':'b'}
def b():
x['a'] = 'd'
print(x)
return b
>>> b = a()
>>> b()
{'a':'d'}
输出符合我的预期。但为什么下面的代码不起作用?
def m():
x = 1
def n():
x += 1
print(x)
return n
>>> n = m()
>>> n()
UnboundLocalError: 赋值前引用了局部变量'x'
老实说,我知道我们可以使用 nonlocal x
语句来解决这个问题
但是有人可以为我更深入地解释原因吗? 字典和数字有什么区别
谢谢!