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

时间:2020-06-03 05:49:09

标签: python dictionary chess

我正在使用字典在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]EmptyBoard所在的Default[x][y]中的任何一个。

这会克隆出第一步之后的每一步。

如何进行编辑,以便仅编辑Board

1 个答案:

答案 0 :(得分:0)

DefaultEmptyBoard都是要列出的字典。当您在update中调用NewGame时,您将Board[3]设置为引用与EmptyBoard[3]完全相同的列表。然后,如果您编写如下内容:

Board[3][4] = X

您更改了该列表-在BoardEmptyBord(或BoardDefault之间共享)。

要解决此问题,请使用deepcopy

import copy

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

另一件事-约定是在python中以小写字母开头的变量。

相关问题