Python:修改一个字典中的值会更改另一个字典

Python:修改一个字典中的值会更改另一个字典,python,dictionary,chess,Python,Dictionary,Chess,我正在使用字典在Python上制作一个国际象棋程序,要设置我的棋盘,我需要: EmptyBoard = { 8:['☐','☒','☐','☒','☐','☒','☐','☒'], 7:['☒','☐','☒','☐','☒','☐','☒','☐'], 6:['☐','☒','☐','☒','☐','☒','☐','☒'], 5:['☒','☐','☒','☐','☒','☐','☒','☐'], 4:['☐','☒','☐','☒','☐','☒','

我正在使用字典在Python上制作一个国际象棋程序,要设置我的棋盘,我需要:

EmptyBoard = {
    8:['☐','☒','☐','☒','☐','☒','☐','☒'],
    7:['☒','☐','☒','☐','☒','☐','☒','☐'],
    6:['☐','☒','☐','☒','☐','☒','☐','☒'],
    5:['☒','☐','☒','☐','☒','☐','☒','☐'],
    4:['☐','☒','☐','☒','☐','☒','☐','☒'],
    3:['☒','☐','☒','☐','☒','☐','☒','☐'],
    2:['☐','☒','☐','☒','☐','☒','☐','☒'],
    1:['☒','☐','☒','☐','☒','☐','☒','☐'],
    ' ':['⒜','⒝','⒞','⒟','⒠','⒡','⒢','⒣']
    }   #regular letters aren't wide enough

Default = {
    8:['♜','♞','♝','♛','♚','♝','♞','♜'],
    7:['♟','♟','♟','♟','♟','♟','♟','♟'],
    2:['♙','♙','♙','♙','♙','♙','♙','♙'],
    1:['♖','♘','♗','♕','♔','♗','♘','♖']
    }

Board = {}

def NewGame():
    Board.update(EmptyBoard)
    Board.update(Default)
    # some more code

NewGame()
这很好,直到我必须在
Board
中编辑块,如下所示:

Board[3][2] = "X"
print(EmptyBoard[3][2]) # ==> Results in 'X', should stay '☐' or '☒'
这会同时更改
Board[x][y]
[x][y]
恰好位于的
EmptyBoard
Default
中的任何一个

这将克隆第一次移动后的每个动作的片段


如何使其仅编辑

默认和
清空板
都是列表中的字典。在
NewGame
中调用
update
时,您将
Board[3]
(例如)设置为引用与
清空Board[3]
完全相同的列表。然后,如果你写了这样的东西:

Board[3][4] = X
您可以更改该列表-该列表在
Board
EmptyBord
(或
Board
默认值
)之间共享

要修复它,请使用
deepcopy

import copy

def NewGame():
    Board.update(copy.deepcopy(EmptyBoard))
    Board.update(copy.deepcopy(Default))
    ...

还有一件事——约定是在python中以小写字母开头变量

“董事会”在何处以及如何定义?如果你能提供一个最小的可复制的例子那就太好了()@Roy2012编辑了这篇文章,谢谢你的建议!你在代码中的任何地方都叫“新游戏”吗?如果您能提供几行代码来产生“错误”的结果,那就太好了。@Roy2012我只是把它称为Roy2012,我只是以某种方式完成了这种模式。文章已被编辑以反映这一点。
文章
包含哪些内容?并将完整代码张贴在更新板的位置