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

如何复制嵌套列表?实现列表A为列表C的独立副本

如何复制嵌套列表以创建独立副本

问题分析

  • 直接赋值a = c:这只是让变量a指向c的内存地址,两者指向同一个列表对象,修改c的元素时a必然同步变化,无法实现独立副本。
  • 使用c.copy()报错:该方法是Python 3新增的列表方法,若运行环境为Python 2,列表对象没有这个属性,因此会报错。另外即使在Python 3中,copy()属于浅拷贝,仅复制外层列表,嵌套的子列表仍然是引用关系,修改子列表元素时a还是会跟着变。

解决方案

要创建嵌套列表的完全独立副本(深拷贝),有两种可靠方式:

1. 使用copy模块的deepcopy函数

这是最简便的方法,会递归复制所有层级的元素:

import copy
b = [["1","1","1"],["1","1","1"],["1","1","1"]]
c = [["2","2","2"],["2","2","2"],["2","2","2"]]
a = copy.deepcopy(c)

此时修改c的任意元素(包括嵌套子列表的元素),a的内容都不会受影响。

2. 手动实现递归深拷贝

如果不想依赖模块,可以自己写递归函数复制每一层:

def deep_copy_nested_list(lst):
    new_list = []
    for item in lst:
        # 若当前元素是列表,递归复制;否则直接添加
        new_list.append(deep_copy_nested_list(item) if isinstance(item, list) else item)
    return new_list

b = [["1","1","1"],["1","1","1"],["1","1","1"]]
c = [["2","2","2"],["2","2","2"],["2","2","2"]]
a = deep_copy_nested_list(c)

补充:Python 2中的浅拷贝替代

如果只是需要浅拷贝(不关心嵌套子列表的独立性),在Python 2中可以用以下方式替代copy():

  • 切片操作:a = c[:]
  • 转换为列表:a = list(c)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:10:30