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

Python字典赋值给列表后为何出现5个重复元素?

问题解析:为何列表中全是相同元素?

首先纠正一个小细节:你的代码运行后,mylist里会有6个(而非5个)完全相同的元素,输出结果为:

[{'x': 5, 'y': 10}, {'x': 5, 'y': 10}, {'x': 5, 'y': 10}, {'x': 5, 'y': 10}, {'x': 5, 'y': 10}, {'x': 5, 'y': 10}]

核心原因:可变对象的引用传递

在Python中,字典属于可变对象,变量名本质是对内存中对象的引用。你的代码逻辑存在以下关键问题:

  • 一开始创建的o = {'x':0, 'y':0}是一个字典对象,o只是指向这个对象的"指针"。
  • 循环里的m = o并没有复制新字典,只是让m也指向同一个字典对象。
  • 每次修改m['x']和m['y'],都是直接修改内存中那同一个字典的内容。
  • mylist.append(m)添加的是这个字典的引用,而非字典本身,所以列表里的6个元素其实都是指向同一个字典的指针。

当循环结束时,这个字典最后一次被修改为{'x':5, 'y':10},因此列表里所有元素显示的都是这个最终状态。

解决方法:每次循环创建独立字典

要得到预期的不同元素,需在每次循环中生成新的字典对象,常见两种方式:

  1. 直接在循环内创建新字典:
mylist=[]
for i in range(6):
   m = {'x': i, 'y': i*2}
   mylist.append(m)
print(mylist)
  1. 复制原字典的浅拷贝(适合结构简单的字典):
o = {'x':0, 'y':0}
mylist=[]
for i in range(6):
   m = o.copy()  # 等价于 dict(o)
   m['x'] = i
   m['y'] = i*2
   mylist.append(m)
print(mylist)

两种方式都会生成独立的字典对象,最终列表会输出[{'x':0,'y':0}, {'x':1,'y':2}, ..., {'x':5,'y':10}]的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:33:15