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

Python复制嵌套列表修改副本时改动原变量如何解决?

问题根因

你遇到的副本修改联动原列表的问题,本质是Python中浅拷贝和深拷贝的机制差异导致的。
你最初写的test_puzzle = puzzle根本没有创建副本,只是给原列表绑定了一个新变量名,两个变量指向内存里完全同一个列表对象,不管修改哪一层内容都会同步生效。
后续你尝试的test_puzzle = puzzle[:]、test_puzzle = list(puzzle)、test_puzzle = puzzle.copy()都属于浅拷贝操作:这类操作只会复制最外层的列表对象,列表内部存储的嵌套子列表依然指向原对象的内存地址,所以修改内层子列表的元素时,原列表的对应内容还是会同步变化。

正确解决方案

使用Python标准库copy模块提供的deepcopy()方法创建深拷贝即可。深拷贝会递归遍历所有层级的嵌套对象,生成完全独立的新副本,对副本的任何修改都不会影响原始列表。
正确测试代码:

import copy

puzzle = [[1, 2, 3]]
test_puzzle = copy.deepcopy(puzzle)
test_puzzle[0][1] = 7
print(puzzle)
print(test_puzzle)

运行输出:

[[1, 2, 3]]
[[1, 7, 3]]
拷贝方式选型参考
  • 若列表内所有元素都是不可变类型(数字、字符串、元组),用切片[:]、list()构造、list.copy()做浅拷贝即可,性能比深拷贝更好
  • 若列表存在嵌套可变对象(嵌套列表、字典、自定义可变实例),且需要副本和原对象完全隔离,必须使用copy.deepcopy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:09:33