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

Python列表追加异常:为何两次追加结果一致而非预期的不同列表?

为什么Python列表追加后出现重复结果?

先看你遇到的问题代码:

This = []
That = []

This.append('A')
That.append(This)

This.append('B')
That.append(This)

print(That)

预期输出[['A'],['A','B']],实际却得到[['A','B'],['A','B']]。

问题根源

Python里的列表是可变对象,当你执行That.append(This)时,并不是把This的内容复制一份放进That,而是把This这个列表对象的引用存到了That里。也就是说,That里的两个元素其实指向的是同一个列表。

当你后续给This追加'B'时,这个列表本身被修改了,而That里的两个引用指向的都是这个被修改后的列表,所以最后打印That时,两个元素显示的都是修改后的结果。

正确写法的原理

再看能得到预期结果的代码:

That = []

This = ['A']
That.append(This)

This2 = ['A', 'B']
That.append(This2)

print(That)

这里每次都是创建一个新的列表对象(['A']和['A','B']),然后把这两个独立的对象引用追加到That里。它们指向不同的内存地址,修改其中一个不会影响另一个,所以最终输出符合预期。

修复第一个代码的方法

如果不想每次都创建新变量,只需要在追加时复制一份列表的副本,而不是直接追加原列表的引用:

This = []
That = []

This.append('A')
That.append(This.copy())  # 复制列表副本

This.append('B')
That.append(This.copy())  # 再次复制副本

print(That)  # 输出: [['A'], ['A', 'B']]

除了copy()方法,也可以用list(This)或者切片This[:]来生成副本,效果是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:22:38