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

Python列表复制后修改副本却影响原列表的问题排查

问题原因分析

你遇到的差异核心在于浅拷贝与深拷贝的区别:

  • .copy() 和切片 [:] 都属于浅拷贝,仅复制外层列表的结构。如果原列表包含可变子对象(比如嵌套的列表),副本与原列表会共享这些子对象的引用。修改副本中的子对象元素时,本质是操作原列表与副本共同指向的同一个子对象,因此原列表也会同步变化。
  • 而decider是一维列表,元素为不可变类型(如数字),浅拷贝后副本的元素是独立的,修改副本元素不会影响原列表,因此你看到的结果符合预期。
解决方案

针对嵌套列表的拷贝需求,需要使用深拷贝来递归复制所有层级的可变对象,具体有两种方式:

方式一:使用copy模块的deepcopy方法

import copy

# 深拷贝嵌套列表
_team1_picks = copy.deepcopy(team1_picks)
_team2_picks = copy.deepcopy(team2_picks)

# 修改副本的子列表元素,原列表不会受影响
for karte in _team1_picks:
    karte[2], karte[3] = karte[3], karte[2]

方式二:手动遍历复制子列表

如果不想导入模块,可以通过列表推导式逐个复制子列表:

# 逐个复制嵌套的子列表
_team1_picks = [sub_list.copy() for sub_list in team1_picks]
_team2_picks = [sub_list.copy() for sub_list in team2_picks]

# 后续修改操作不会影响原列表
for karte in _team1_picks:
    karte[2], karte[3] = karte[3], karte[2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:12:16