Python:修改一个字典中的值会更改另一个字典
我正在使用字典在Python上制作一个国际象棋程序,要设置我的棋盘,我需要:Python:修改一个字典中的值会更改另一个字典,python,dictionary,chess,Python,Dictionary,Chess,我正在使用字典在Python上制作一个国际象棋程序,要设置我的棋盘,我需要: EmptyBoard = { 8:['☐','☒','☐','☒','☐','☒','☐','☒'], 7:['☒','☐','☒','☐','☒','☐','☒','☐'], 6:['☐','☒','☐','☒','☐','☒','☐','☒'], 5:['☒','☐','☒','☐','☒','☐','☒','☐'], 4:['☐','☒','☐','☒','☐','☒','
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,我只是以某种方式完成了这种模式。文章已被编辑以反映这一点。
文章
包含哪些内容?并将完整代码张贴在更新板的位置