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

Python生成嵌套列表时子列表元素ID相同的原因及解决方法

问题出现原因

Python中的列表属于可变对象,你在循环中执行append(sample_list)操作时,并没有创建新的列表副本,只是将同一个sample_list对象的内存引用重复添加到了list_of_lists中。也就是说list_of_lists里存储的3个子列表本质是指向内存中同一个列表实例的指针,修改任意一个子列表的元素,本质都是修改原sample_list的内容,所有子列表自然会同步变更。你打印出来的元素ID完全相同,也证明了它们指向同一个对象。

生成独立嵌套列表的方案

根据sample_list的元素类型,有两种常用实现方案:

  • 如果sample_list的所有元素都是不可变类型(比如你案例里的字符串,或者数字、不可变元组等),使用浅拷贝即可满足需求,有三种等价写法可以选:
    1. 调用列表自带的copy()方法
    2. 使用切片语法sample_list[:]
    3. 使用list()构造函数生成新列表
      示例代码:
    list_of_lists = []
    sample_list = ['1', '2', '3']
    
    for x in range(3):
        # 三种写法任选其一即可
        list_of_lists.append(sample_list.copy())
        # list_of_lists.append(sample_list[:])
        # list_of_lists.append(list(sample_list))
    
    # 此时修改单条子列表不会影响其他子列表
    list_of_lists[0][1] = '0'
    print(list_of_lists)
    # 输出:[['1', '0', '3'], ['1', '2', '3'], ['1', '2', '3']]
    
  • 如果sample_list内部还嵌套了可变对象(比如子元素是列表、字典等),需要使用深拷贝保证所有层级的元素都完全独立,需要导入标准库copy的deepcopy方法:
    示例代码:
    import copy
    list_of_lists = []
    # 举个嵌套可变对象的例子
    sample_list = ['1', [2,3], '4']
    
    for x in range(3):
        list_of_lists.append(copy.deepcopy(sample_list))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:54:02