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中看不到更改,我想这就是我需要的答案