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

Python如何复制元素为列表类型的列表?浅拷贝失效问题解决

嘿,我来帮你把这个问题掰明白~

为什么修改b时a也会跟着变化?

你用b = list(a)做的是浅拷贝,这就是核心问题!虽然b本身是一个全新的列表对象,但它里面的元素——也就是那个空列表[]——和a里的子列表是同一个内存对象。简单说,a和b就像两个不同的文件夹,但它们都指向同一个文件,你修改这个文件,两个文件夹里看到的内容自然都会变。

咱们用代码直观验证这一点:

a = [[]]
b = list(a)
print(a[0] is b[0])  # 输出True,说明这两个子列表是同一个内存对象
保持a不被修改的解决方案

既然不能用copy这类包,咱们可以用列表推导式做单层深拷贝:

a = [[]]
b = [c[:] for c in a]  # 对每个子列表用切片[:]生成新的独立副本
for i in [1,2]:
    for j in b:
        j.append(i)
print(a)  # 输出[[]],a完全没被改动,达到预期效果!

⚠️ 重要提醒:这个方法只适用于单层嵌套的列表场景。如果你的列表是更深层次的嵌套(比如[[[1, 2]]]),这种切片拷贝就不足以完全隔离对象了,那时候需要去查找「deep copy」相关的实现方法来处理多层嵌套的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:27:19