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
相关产品推荐
相关产品推荐

