我正在使用字典在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
?
答案 0 :(得分:0)
Default
和EmptyBoard
都是要列出的字典。当您在update
中调用NewGame
时,您将Board[3]
设置为引用与EmptyBoard[3]
完全相同的列表。然后,如果您编写如下内容:
Board[3][4] = X
您更改了该列表-在Board
和EmptyBord
(或Board
和Default
之间共享)。
要解决此问题,请使用deepcopy
:
import copy
def NewGame():
Board.update(copy.deepcopy(EmptyBoard))
Board.update(copy.deepcopy(Default))
...
另一件事-约定是在python中以小写字母开头的变量。