python对象列表,每个对象都有自己的数组字典。附加到一个附加到所有人

时间:2013-01-22 17:51:06

标签: python list memory dictionary

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument
  dictionary shared between objects for no reason?

     class Player():
        zones = {}
        def __init__(self):
            self.zones['hand'] = []
        def InitHand(self):
            for a in range(5):
                self.zones['hand'].append(a)
lst = []
lst.append(Player())
lst.append(Player())
lst[0].InitHand()
print lst[1].zones['hand']

打印“[0,1,2,3,4]”,但我只初始化了第0个元素...... 如下所示将它们更改为数组可以解决问题,但对于我的生活,我无法弄清楚为什么会发生这种情况。

    class Player2():
        zones = []
        def __init__(self):
            self.zones = []
        def InitHand(self):
            for a in range(5):
                self.zones.append(a)
lst = []
lst.append(Player2())
lst.append(Player2())
lst[0].InitHand()
print lst[1].zones

按预期打印“[]”

1 个答案:

答案 0 :(得分:3)

在您的代码中,所有玩家共享相同的zones词典。类范围中设置的任何内容都是属性,而不是实例属性。

class Player():
    def __init__(self):
        self.zones = {}
        self.zones['hand'] = []
    def InitHand(self):
        for a in range(5):
            self.zones['hand'].append(a)