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
相关产品推荐
相关产品推荐

