python - 为什么 deepcopy 不能在 python 字典上工作?
问题描述
如何在字典中实现deepcopy?
我的原始代码:
li1 = ['Column_6', 'Column_11']
delimiters = ['a','b','c','d']
inner_dict = dict.fromkeys(delimiters,[0,0])
delim_dict = dict.fromkeys(li1 ,None)
for k,v in delim_dict.items():
delim_dict[k] = copy.deepcopy(inner_dict)
print (delim_dict) 给出
{'Column_6': {'a': [0, 0], 'b': [0, 0], 'c': [0, 0], 'd': [0, 0]},
'Column_11': {'a': [0, 0], 'b': [0, 0], 'c': [0, 0], 'd': [0, 0]}}
delim_dict['Column_6']['a'][0]=5
print (delim_dict)
给
{'Column_6': {'a': [5, 0], 'b': [5, 0], 'c': [5, 0], 'd': [5, 0]},
'Column_11': {'a': [0, 0], 'b': [0, 0], 'c': [0, 0], 'd': [0, 0]}}
尽管进行了深度复制,为什么键 b、c、d 仍用 [5, 0] 更新?
我可以使用修改后的代码实现结果:
li1 = ['Column_6', 'Column_11']
delimiters = ['a','b','c','d']
#inner_dict = dict.fromkeys(delimiters,[0,0])
delim_dict = dict.fromkeys(li1 ,None)
for k,v in delim_dict.items():
delim_dict[k] = {}
for delim in delimiters:
delim_dict[k][delim]=[0,0]
但是,我怎样才能通过深拷贝获得相同的结果,或者还有其他有效的方法吗?
注意:我尝试点击此链接: Python 中字典的深拷贝 没有运气。
解决方案
您使用与所有inner_dict
值相同的列表对象,并deepcopy
尊重并保持这种方式。你显然不想要。所以一开始就不要这样做。inner_dict = {d: [0, 0] for d in delimiters}
改为这样做。
正如文档所说fromkeys
:
所有的值都只引用一个实例,因此value通常是一个可变对象(例如空列表)是没有意义的。要获得不同的值,请改用 dict 理解。
推荐阅读
- java - 在 JavaFX 和 Scene Builder 中使用 2D 数组
- r - 从多级序数 logit (clmm) 估计和绘制预测概率
- reactjs - 如何在每次页面更新时获取元素的高度
- android - Kotlin - Uncaught TypeError: X is not a function - JavascriptInterface with WebViews
- javascript - 在Javascript中的多个键上加入对象数组
- python - 使用 Python/OpenCV 从图像中提取固定数量的正方形
- python - 如何为具有动态大小的二维数组的元素赋值?
- jenkins - IntelliJ、Groovy、Jenkins 和未解决的访问
- apache-spark - Pyspark 中两个数组相减得到一个新数组
- python - 为什么在 python 中使用 OrderedDict 有缺点?