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

为何使用copy()函数后修改temp列表时matrix列表也发生变化?

二维列表拷贝后修改子元素导致原列表变动的问题解决

问题原因

matrix.copy() 属于浅拷贝——它只会复制外层列表的结构,但里面的每个子列表都是原列表中子列表的引用。也就是说,temp 和 matrix 里的子列表指向的是同一个内存对象,所以修改 temp[0][1] 时,实际改动的是原 matrix 里的第一个子列表,最终导致原列表跟着变化。

解决方法

方法1:列表推导式逐个拷贝子列表

通过遍历原列表的每个子列表,单独拷贝每个子列表生成新的二维列表:

matrix = [[1, 1, 1], [1, 0, 1], [1, 1, 1]]
temp = [row.copy() for row in matrix]  # 逐个拷贝子列表
temp[0][1] = 69

print('temp: ', temp)
print('matrix: ', matrix)

输出结果:

temp:  [[1, 69, 1], [1, 0, 1], [1, 1, 1]]
matrix:  [[1, 1, 1], [1, 0, 1], [1, 1, 1]]

方法2:使用copy模块的深拷贝

如果是更复杂的嵌套结构(比如多层嵌套列表),可以用copy.deepcopy()实现完全拷贝,所有层级的对象都会被复制为新的实例:

import copy
matrix = [[1, 1, 1], [1, 0, 1], [1, 1, 1]]
temp = copy.deepcopy(matrix)  # 深拷贝所有层级
temp[0][1] = 69

print('temp: ', temp)
print('matrix: ', matrix)

输出结果和方法1一致,原列表不会被改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:17:13