Python嵌套列表赋值副本后修改同步原列表的问题求助
问题原因
你用board[:]做的是浅拷贝——它只复制了外层的列表对象,但里面的每个8元素子列表还是和原board共享引用。所以当你修改test[loc0[0]][loc0[1]]这类子列表元素时,本质上是在修改原board里的子列表内容,导致两者同步变化。
解决方法
针对8×8的二维列表,有两种简单的独立拷贝方式:
方法1:列表推导式实现深拷贝(推荐,适合二维列表场景)
把test = board[:]替换成:
test = [row[:] for row in board]
这个写法会遍历原board的每一行,对每一行做切片拷贝,生成完全独立的子列表,修改test的任何元素都不会影响原board。
方法2:使用copy模块的deepcopy(通用嵌套结构)
如果后续你的列表结构可能更复杂(比如嵌套更深),可以用标准库的深拷贝:
首先在文件顶部导入模块:
import copy
然后替换拷贝语句:
test = copy.deepcopy(board)
deepcopy会递归复制所有嵌套的对象,彻底切断和原列表的引用关联。
代码修改示例
修改后的move函数关键部分:
def move(piece, loc): global board # 替换这里的拷贝方式 test = [row[:] for row in board] global count global turn loc0 = location(piece) # 后续代码不变...
内容的提问来源于stack exchange,提问作者tedch
相关产品推荐
相关产品推荐

