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

字典操作时所有值被修改而非对应值问题求助

问题分析与解决思路

兄弟,太懂这种卡了一小时才发现是低级失误的憋屈感!😅

你遇到的问题本质是Python可变对象的引用陷阱:你应该是在循环之外只初始化了一次dp字典,每次循环只是修改这个字典里的内容,然后把同一个dp对象赋值给d的不同货币键。因为字典是可变对象,d里所有键存储的都是同一个dp的内存引用,所以你每次修改dp,d里所有对应的值都会跟着变。

错误代码示例(大概率是你现在的写法)

d = {}
dp = {}  # 只创建一次字典对象

# 读取文件并处理
with open("balance_data.txt", "r") as f:
    for line in f:
        currency, balance = line.strip().split()
        dp["balance"] = balance
        d[currency] = dp  # 每次都把同一个dp的引用存进去

正确的解决方法

解决核心是每次循环都创建新的字典对象,让d的每个键对应独立的字典:

方法1:循环内新建dp

d = {}

with open("balance_data.txt", "r") as f:
    for line in f:
        currency, balance = line.strip().split()
        dp = {}  # 每次循环都生成新的字典
        dp["balance"] = balance
        d[currency] = dp

方法2:直接生成字典(更简洁)

d = {}

with open("balance_data.txt", "r") as f:
    for line in f:
        currency, balance = line.strip().split()
        d[currency] = {"balance": balance}  # 直接创建新字典赋值

为什么这样能解决?

Python中,像字典、列表这种可变对象,赋值操作传递的是内存地址引用,而不是对象的拷贝。如果一直复用同一个dp,d里所有键指向的都是同一个内存地址,修改dp自然会影响所有关联的值。而每次循环新建字典,每个键都会对应独立的内存对象,相互之间就不会干扰了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:00:00