Python 全局字典具有更改值
我有下面的示例代码:Python 全局字典具有更改值,python,python-3.x,Python,Python 3.x,我有下面的示例代码: A = None class App(object): def __init__(self, a): global A A = a a = {'x': 1} print(A) # None App(a) print(A) # {'x': 1} a['x'] = 2 print(A) # {'x': 2} # value change if dictionary a = 2 print(A) # {'x
A = None
class App(object):
def __init__(self, a):
global A
A = a
a = {'x': 1}
print(A) # None
App(a)
print(A) # {'x': 1}
a['x'] = 2
print(A) # {'x': 2} # value change if dictionary
a = 2
print(A) # {'x': 2} # value not change
但我不知道为什么全球A已经改变了价值?请帮助我了解这一点,您在课堂教学方法中使用了行
global A
。这样可以确保此处引用的变量A
与您在第一行中定义的全局A
相同。如果省略该语句,函数中将定义一个新的局部变量a
运行类方法后,A
现在引用A
。因此,对a
的所有更改也适用于a
在最后一行中,您更改变量
a
的类型及其值<代码>A现在将失去与A
的绑定。有关解释,请参见此答案:我故意使用全局变量。我只是不明白为什么重新分配“a”字典来更改“a”,就像说print(a)
打印对象本身,而不是打印字符串a
,a=a
将a
分配给对象本身,而不是名称a
A
与A
相同,只是因为它们引用了相同的对象。当您使用a['x']=2
时,您正在对对象执行操作。由于A
引用同一对象,因此在打印A
时可以看到更改。当你说a=2
时,a
现在指的是另一个对象。它没有修改它用来引用的对象,因此在A
@zondo nice中看不到更改,我想这就是我需要的答案