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

Python如何拷贝嵌套列表并修改副本而不改变原列表?

问题原因

list.copy()执行的是浅拷贝操作:仅复制最外层的列表容器,列表中存储的嵌套子列表并没有被创建新副本,新旧外层列表里的子列表指向内存中完全相同的对象。此时你遍历修改子列表内的元素,本质是在修改两个外层列表共同引用的同一个子列表,因此原列表startTimeList会被同步改动。

实现方法

以下两种方案都可以得到你期望的结果,按需选择即可:

  • 方案1:深拷贝(适配任意复杂嵌套结构)
    使用copy模块的deepcopy方法,会递归复制所有层级的嵌套对象,拷贝完成后两个列表完全独立,修改互不影响:
import copy

startTimeList = [[0, 0], [2, 0], [4, 0], [6, 0], [8, 0], [10, 0], [12, 0], [14, 0], [16, 0], [18, 0], [20, 0], [22, 0]]
flowDuration = 10

endTimeList = copy.deepcopy(startTimeList)
for sub_list in endTimeList:
    sub_list[1] = flowDuration

print("startTimeList:", startTimeList)
print("endTimeList:", endTimeList)
  • 方案2:列表推导式生成新列表(适配当前固定结构,更轻量无依赖)
    遍历原列表时直接构造全新的子列表,不需要导入额外模块,执行效率更高:
startTimeList = [[0, 0], [2, 0], [4, 0], [6, 0], [8, 0], [10, 0], [12, 0], [14, 0], [16, 0], [18, 0], [20, 0], [22, 0]]
flowDuration = 10

endTimeList = [[time, flowDuration] for time, _ in startTimeList]

print("startTimeList:", startTimeList)
print("endTimeList:", endTimeList)

两种代码运行后输出均为:

startTimeList: [[0, 0], [2, 0], [4, 0], [6, 0], [8, 0], [10, 0], [12, 0], [14, 0], [16, 0], [18, 0], [20, 0], [22, 0]]
endTimeList: [[0, 10], [2, 10], [4, 10], [6, 10], [8, 10], [10, 10], [12, 10], [14, 10], [16, 10], [18, 10], [20, 10], [22, 10]]

内容的提问来源于stack exchange,提问作者HTTP ERROR 500

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:18:25