如何停止更新所有对象';对象列表中的词典?(Python)

如何停止更新所有对象';对象列表中的词典?(Python),python,python-3.x,dictionary,Python,Python 3.x,Dictionary,对于一个学校项目,我正在尝试将棋盘游戏转换为Python游戏 我正在翻译的游戏是“股票代码”,它涉及买卖6只“股票”。可以玩的玩家数量是2-8。我创建变量player count的方法是创建一个player类,初始化一个player对象,并在游戏开始时将其添加到列表中 class player: money = 5000 stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}

对于一个学校项目,我正在尝试将棋盘游戏转换为Python游戏

我正在翻译的游戏是“股票代码”,它涉及买卖6只“股票”。可以玩的玩家数量是2-8。我创建变量player count的方法是创建一个player类,初始化一个player对象,并在游戏开始时将其添加到列表中

class player:
    money = 5000
    stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}
我用

for i in range(0, playersTotal):
     newPlayer = player()
     playerList.append(newPlayer)
问题在于,当玩家买卖股票并调整价值时,比如:(假设玩家0拥有0黄金)

每个玩家的字典都以同样的方式更新

print(playerList[1].stocks['Gold'])
>>>1000
我不知道为什么会为列表中的所有玩家对象更新字典,因为当调整money属性时,它保持独立:(如果两个玩家都有0 money)


如何将字典分开?

这是因为您的
股票
静态的
,您应该将其作为
实例
变量,而不是
静态
变量,请尝试以下操作:

class player:    
    def __init__(self):
        self.money = 5000
        self.stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}
由于
stocks
变量是
static
,因此所有实例都使用相同的
stocks
,因此当您从任何实例更新其值时,它将为所有实例更新,因为该变量为所有实例共享

输出

>>> for i in range(0, 10):
...      newPlayer = player()
...      playerList.append(newPlayer)
... 
>>> playerList[0].stocks['Gold'] += 5000
>>> playerList[0].stocks['Gold'] 
5000
>>> playerList[1].stocks['Gold']
0

您正在跨实例使用相同的词典。当您更改字典时,会在实例之间看到效果。您需要在
\uuuu init\uuuu
函数中定义变量。@MauriceMeyer虽然这是一个很好的建议,但从根本上讲,变量需要是实例变量,无论它们在何处定义。
class player:    
    def __init__(self):
        self.money = 5000
        self.stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}
>>> for i in range(0, 10):
...      newPlayer = player()
...      playerList.append(newPlayer)
... 
>>> playerList[0].stocks['Gold'] += 5000
>>> playerList[0].stocks['Gold'] 
5000
>>> playerList[1].stocks['Gold']
0