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

Python列表嵌套问题:添加list2至list1后清空结果不符预期

列表引用导致的内容同步问题分析与解决

问题场景

  • 初始空列表 list1 = []
  • 列表 list2 = [2, 4, 6]
    需求是将list2作为子列表加入list1,随后清空list2,但执行代码后发现list1中的子列表也变成了空列表。

代码与输出对比

原代码:

list1 = []
list2 = [2, 4, 6]
list1.append(list2)
del list2[:]
print("List 2: ", list2)
print('List 1: ', list1)

预期输出:

List 2:  []
List 1:  [[2, 4, 6]]

实际输出:

List 2:  []
List 1:  []

问题根源

Python里的列表是可变对象,list1.append(list2)操作并没有把list2的元素复制一份存入list1,而是把list2这个对象的内存引用添加到了list1中。这意味着list1里的子列表和原list2指向的是内存中同一个列表对象。后续用del list2[:]清空list2时,本质是修改了这个共享的对象,所以list1里的子列表也会同步变成空。

解决方案

要实现需求,需要将list2的副本添加到list1中,而不是直接添加引用。常用的创建列表副本的方式有三种:

  1. 使用切片语法创建副本:
list1.append(list2[:])
  1. 使用list()构造函数创建副本:
list1.append(list(list2))
  1. 使用列表推导式生成副本:
list1.append([x for x in list2])

修改后完整代码

list1 = []
list2 = [2, 4, 6]
# 添加list2的副本而非引用
list1.append(list2[:])
del list2[:]
print("List 2: ", list2)
print('List 1: ', list1)

执行后会得到预期输出:

List 2:  []
List 1:  [[2, 4, 6]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:03:13