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

Python字典赋值异常:所有键对应列表完全相同的问题排查

问题分析与解决:Python字典赋值后所有键对应列表一致的问题

你的代码核心问题是Python中列表是可变对象,赋值传递的是引用而非副本。

你在循环里反复把numbers赋值给字典的不同键,但实际上所有键存储的都是同一个列表的内存地址。后续每次numbers.append()修改的都是这个唯一的列表,所以最后所有键都会指向这个被修改到最终状态的列表。

解决方法

方法1:每次赋值时创建列表副本

在把列表存入字典时,用copy()方法或者list()生成当前列表的副本,这样每个键都会持有独立的列表:

months = ['jan', 'feb', 'mar', 'apr']
numbers = []
sqrDict = {}
i = 1
for m in months:
    numbers.append(i**2)
    sqrDict[m] = numbers.copy()  # 生成当前列表的副本
    i += 1

print('sqrDict =', sqrDict)

方法2:用列表推导式直接生成对应列表

更简洁的方式是利用enumerate获取索引,直接生成对应长度的平方列表,避免共享引用的问题:

months = ['jan', 'feb', 'mar', 'apr']
sqrDict = {}
for idx, m in enumerate(months, start=1):
    sqrDict[m] = [x**2 for x in range(1, idx+1)]

print('sqrDict =', sqrDict)

方法3:通过列表拼接创建新列表

利用列表+拼接会返回新列表的特性,每次生成新的列表存入字典:

months = ['jan', 'feb', 'mar', 'apr']
current_squares = []
sqrDict = {}
i = 1
for m in months:
    current_squares = current_squares + [i**2]  # 拼接生成新列表
    sqrDict[m] = current_squares
    i += 1

print('sqrDict =', sqrDict)

以上三种方法都能让字典的每个键对应独立的列表,得到你预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:05:20