所以我需要制作嵌套列表的深层副本,但不使用导入副本。我有一个单独的函数来输出 Board
Board = [['B', 'B', 'B', 'B', 'B'], ['B', 'B', 'B', 'B', 'B'], ['B', 'B', '', 'W', 'W'], ['W', 'W', 'W', 'W', 'W'], ['W', 'W', 'W', 'W', 'W'], 0]
所以我想到这样做来使用for循环进行深度复制:
def copy(b: Board) -> Board:
if isinstance(b, list):
return [copy(item) for item in b]
else:
return b
但是当这样做时,我想我只是返回 b 而没有进行深层复制,因为末尾的 0 是一个整数? 我是否也正确地认为,为了测试我是否进行了正确的深度复制,我可以执行以下操作来确认:
copy == Board
True
copy is Board
False
返回副本时,我得到以下信息:
[['B', 'B', 'B', 'B', 'B'], ['B', 'B', 'B', 'B', 'B'], ['B', 'B', '', 'W', 'W'], ['W', 'W', 'W', 'W', 'W'], ['W', 'W', 'W', 'W', 'W'], 0]
但是当尝试使用“==”和“is”进行测试时,我得到:
copy == make_Board
False
copy is make_Board
False
编辑 读了一下之后,我似乎使用了“is”和“==”错误。我应该是:
copy(Board) is Board
False
从而确认它不是深拷贝
要制作董事会的副本,您可以使用下一个示例:
Board = [
["B", "B", "B", "B", "B"],
["B", "B", "B", "B", "B"],
["B", "B", "", "W", "W"],
["W", "W", "W", "W", "W"],
["W", "W", "W", "W", "W"],
0,
]
def copy_board(b):
return [item[:] if isinstance(item, list) else item for item in b]
new_Board = copy_board(Board)
new_Board[0][0] = "XXX"
print(Board)
print(new_Board)
打印:
[
["B", "B", "B", "B", "B"],
["B", "B", "B", "B", "B"],
["B", "B", "", "W", "W"],
["W", "W", "W", "W", "W"],
["W", "W", "W", "W", "W"],
0,
]
[
["XXX", "B", "B", "B", "B"],
["B", "B", "B", "B", "B"],
["B", "B", "", "W", "W"],
["W", "W", "W", "W", "W"],
["W", "W", "W", "W", "W"],
0,
]