You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:05:14