Python:修改一个字典中的值会改变另一个字典[关闭]

问题描述 投票:-4回答:1

我在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] 而无论哪一个 EmptyBoardDefault[x][y] 碰巧在。

这样就可以在棋子第一次下棋后的每一步棋中克隆出棋子。

我怎样才能让它只在 Board 是编辑过的?

python dictionary chess
1个回答
0
投票

两者 DefaultEmptyBoard 是字典从东西到列表。当你调用 updateNewGame,你设置 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中的惯例是以小字母开头的变量。

© www.soinside.com 2019 - 2024. All rights reserved.