字典操作时所有值被修改而非对应值问题求助
问题分析与解决思路
兄弟,太懂这种卡了一小时才发现是低级失误的憋屈感!😅
你遇到的问题本质是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
相关产品推荐
相关产品推荐

