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

Python中用单个变量操作两个二维列表结果相同的解决方法

二维列表操作时的独立引用问题解决

问题原因

Python中列表的copy()方法属于浅拷贝:对于二维列表来说,浅拷贝只会复制外层列表的引用,内部的子列表仍然共享同一内存地址。所以你修改board的子元素时,board1、board2甚至原始的empty_board都会同步变化——因为它们指向的是同一批子列表。

修复方案

要让board1和board2成为完全独立的二维列表,有两种可行的修改方式:

方法1:直接生成独立的空列表

跳过中间的empty_board拷贝步骤,直接为两个列表生成全新的二维结构:

BOARD_SIZE = 5

# 直接创建两个完全独立的空二维列表
board1 = [[0 for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]
board2 = [[0 for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]

# 通过board操作board1
board = board1
board[1][1] = 1

# 通过board操作board2
board = board2
board[0][0] = 1

print(f"board1: {board1}")
print(f"board2: {board2}")

方法2:使用深拷贝

如果必须基于已有的empty_board创建列表,使用copy模块的deepcopy()方法——它会递归复制所有层级的元素,彻底断开引用关联:

import copy

BOARD_SIZE = 5

empty_board = [[0 for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]
# 深拷贝生成独立列表
board1 = copy.deepcopy(empty_board)
board2 = copy.deepcopy(empty_board)

board = board1
board[1][1] = 1

board = board2
board[0][0] = 1

print(f"board1: {board1}")
print(f"board2: {board2}")

预期输出

修改后运行代码,会得到两个独立的结果:

board1: [[0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
board2: [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

内容的提问来源于stack exchange,提问作者Jakokreativ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:15:31