Python字典引用问题:修改i_want如何不影响原字典everyday
如何在不修改原字典定义的前提下实现独立的字典副本?
问题根源
你遇到的这个情况,本质是因为Python里的字典是可变对象。当你执行i_want = everyday的时候,并没有创建一个全新的字典,只是让i_want和everyday指向了内存中同一个字典对象。所以后续对i_want的任何修改,都会直接作用在这个共享的对象上,自然会同步影响到everyday的值。
解决方案:创建字典的独立副本
要让i_want成为和原everyday互不影响的独立字典,你需要创建原字典的浅拷贝。针对你的场景,有几种简单直观的实现方式:
方式1:使用字典内置的copy()方法
直接调用字典的copy()方法生成副本:
i_want = everyday.copy()
方式2:借助dict()构造函数
通过构造新字典来完成拷贝:
i_want = dict(everyday)
方式3:使用字典解包语法(Python 3.5+)
利用字典解包快速生成新字典:
i_want = {**everyday}
修改后的完整代码示例
把以上任意一种拷贝方式替换原赋值语句,代码就能符合你的预期:
everyday = {'hello':[],'goodbye':{}} i_want = everyday.copy() # 替换为拷贝逻辑 i_want ['afternoon'] = 'sun' i_want['hello'].append((1,2,3,4)) print("i_want =", i_want) print("everyday =", everyday)
运行结果
i_want = {'hello': [(1, 2, 3, 4)], 'goodbye': {}, 'afternoon': 'sun'} everyday = {'hello': [], 'goodbye': {}}
补充说明:如果你的字典里嵌套了更深层次的可变对象(比如嵌套字典、多层列表),且需要完全独立的深层拷贝,那可以使用
copy模块的deepcopy()方法。不过你的场景里,浅拷贝已经足够满足需求啦。
内容的提问来源于stack exchange,提问作者Moussa El Hafid
相关产品推荐
相关产品推荐

