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

