python关联映射成员变量在对象之间共享的原因

python关联映射成员变量在对象之间共享的原因,python,Python,对于类A,为什么aMap成员变量在对象和对象b之间共享 >>> class A: ... aMap = {} >>> a = A() >>> a.aMap["hello"] = 1 >>> b = A() >>> b.aMap["world"] = 2 >>> c = [] >>> c.append(a) >>> c.append(b)

对于类A,为什么aMap成员变量在对象和对象b之间共享

>>> class A:
...     aMap = {}

>>> a = A()
>>> a.aMap["hello"] = 1

>>> b = A()
>>> b.aMap["world"] = 2

>>> c = []
>>> c.append(a)
>>> c.append(b)

>>> for i in c:
...     for j in i.aMap.items():
...         print j
('world', 2)  
('hello', 1)  
('world', 2)  
('hello', 1)  

因为您将其定义为类属性,而不是实例属性

如果希望将其作为实例属性,而不是在实例之间共享,则必须按如下方式定义:

class A(object):
    def __init__(self):
        self.aMap = {}

因为您将其定义为类属性,而不是实例属性

如果希望将其作为实例属性,而不是在实例之间共享,则必须按如下方式定义:

class A(object):
    def __init__(self):
        self.aMap = {}

因为它是类属性,而不是实例属性(“成员变量”)

要使其成为实例属性,请在实例上分配它,例如在构造函数中:

class A:
    def __init__(self):
        self.aMap = {}
但你也可以这样做:

a = A()
a.aMap = {}

因为它是类属性,而不是实例属性(“成员变量”)

要使其成为实例属性,请在实例上分配它,例如在构造函数中:

class A:
    def __init__(self):
        self.aMap = {}
但你也可以这样做:

a = A()
a.aMap = {}

因为您正在有效地定义一个而不是一个

要定义实例变量,应在引用对象本身的方法上执行(通常为
self
):


因为您正在有效地定义一个而不是一个

要定义实例变量,应在引用对象本身的方法上执行(通常为
self
):


我相信可以解释这一点。我相信的可能重复可以解释这一点。+1的可能重复:类属性在对象之间共享。注意“成员变量”之类的模糊短语。试着谈论“实例属性”和“类属性”,而不是“成员变量”,这是模糊的。这是正确的,特别是因为它是使用属性的唯一方法,当您将来需要它们时:-)+1:类属性在对象之间共享。注意“成员变量”之类的模糊短语。试着谈论“实例属性”和“类属性”,而不是“成员变量”,这是模糊的。这是正确的,特别是当您将来需要属性时,这是使用属性的唯一方法:-)