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

如何创建可独立编辑且不改动原列表的列表副本

解决嵌套列表拷贝后修改副本影响原列表的问题

嘿,这个坑我之前踩过!你遇到的问题核心在于:切片l1[:]做的是浅拷贝(shallow copy)。它只会复制外层的列表结构,但里面的每个子列表还是和原列表l1共享同一个引用——也就是说,l1和l2里的[0,0]、[1,1]这些子列表其实是同一个对象,修改其中一个的元素,另一个自然也会跟着变。

要实现真正的“修改副本不影响原列表”,你需要做深拷贝(deep copy),或者针对嵌套的子列表单独做拷贝,下面给你两种可行的方案:

方案1:使用copy模块的deepcopy(通用型)

这是最稳妥的方式,不管你的列表嵌套多少层,deepcopy都会递归地复制所有层级的对象,完全切断和原列表的引用关联:

import copy

l1 = [[i, i] for i in range(4)]
l2 = copy.deepcopy(l1)  # 深拷贝整个列表
l2[2][1] = 999

print('l1: ', l1)
print('l2: ', l2)

执行后输出:

l1:  [[0, 0], [1, 1], [2, 2], [3, 3]]
l2:  [[0, 0], [1, 1], [2, 999], [3, 3]]

方案2:手动遍历子列表做浅拷贝(针对两层嵌套的场景)

如果你的列表只有两层嵌套,也可以用列表推导式,对每个子列表单独做切片拷贝,这样每个子列表都会生成新的对象:

l1 = [[i, i] for i in range(4)]
l2 = [sub[:] for sub in l1]  # 逐个拷贝子列表
l2[2][1] = 999

print('l1: ', l1)
print('l2: ', l2)

这个方案的输出和上面完全一样,而且不需要额外导入模块,适合简单的嵌套场景。

这样修改后,l2就完全独立于l1了,修改l2的任何元素都不会影响原列表啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:12:28