所有实例都没有改变python类变量?

时间:2016-11-10 19:22:41

标签: python-2.7

我意识到Python类变量对于所有实例都有相同的内存位置,但是我不明白为什么从实例中更改类变量不会影响其他实例和类本身?请参阅以下代码:

class (object):
    name = 'Donald '
    def __init__(self):
        self.x = 4
c = Sam()
z = Sam()
print hex(id(c.name)), hex(id(z.name)), hex(id(Sam.name))
print c.name, z.name

c.name = 'Trump'
print c.name, z.name, US_President.name
print hex(id(c.name)), hex(id(z.name)), hex(id(US_President.name))

US_President.name = 'Obama'
print c.name, z.name, US_President.name


Output:
0x7f227776a930 0x7f227776a930 0x7f227776a930
Donald Donald
Trump Donald Donald
0x7f227776a420 0x7f227776a930 0x7f227776a930
Trump Obama Obama

有人可以解释一下这种行为。提前致谢

1 个答案:

答案 0 :(得分:0)

如果分配给实例的属性,则该名称将成为实例变量。如果存在同名的类变量,则它将隐藏在该特定实例中,但仍可在该类的其他实例中访问。如果要修改类变量,则必须在类上分配它,而不是实例。