可能重复:
“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
按预期打印“[]”
答案 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)