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

为何使用赋值而非append会因子列表的引用复制产生不同结果?

Python中列表乘法与直接赋值的差异原因

先看你给出的示例代码和结果:

示例1:使用append修改子列表

a = [[]] * 3
a[1].append(7)
print(a)

输出:[[7], [7], [7]]

示例2:直接给列表元素赋值

a = [[]] * 3
a[1] = 7
print(a)

输出:[[], 7, []]

两者差异的核心原因是操作本质完全不同:

  • 当你写a = [[]] * 3时,Python并没有创建3个独立的空列表,而是先生成1个空列表对象,再让新列表a的3个元素全部指向这个唯一的空列表。换句话说,a[0]、a[1]、a[2]都是同一个列表的“别名”。
  • 执行a[1].append(7)时,是通过a[1]这个引用去修改它指向的共享列表。因为三个元素都指向同一个列表,所以所有位置都会同步显示修改后的结果。
  • 而执行a[1] = 7时,是直接把a列表索引1的位置,替换成了一个全新的对象(整数7)。此时a[1]不再指向原来的共享列表,但a[0]和a[2]仍指向原空列表,所以只有索引1的位置变成了7,其他位置保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:53:12