Python复制或克隆defaultdict变量

11

我该如何制作Python中defaultdict对象的副本(而不仅仅是将新指针指向相同的存储位置)?

from collections import defaultdict
itemsChosen = defaultdict(list)    
itemsChosen[1].append(1)
dupChosen = itemsChosen
itemsChosen[2].append(1)
print dupChosen

以上代码执行的是浅拷贝并返回

defaultdict(<type 'list'>, {1: [1], 2: [1]})

然而我期望它返回的是什么

defaultdict(<type 'list'>, {1: [1]})

谢谢。


这甚至不是浅拷贝,而只是对同一对象的两个引用。浅拷贝应该是 itemsChosen.copy() - roippi
2
另外作为一件小事,defaultdict 和许多内置函数一样,也有一个复制函数: dupChosen = itemsChosen.copy() - Corley Brigman
感谢您的澄清 - 我误解了浅拷贝/深拷贝。我也找不到defaultdict的函数页面,但这很合理,因为它继承自字典。 - so13eit
1个回答

14

使用copy

from copy import copy

dupChosen = copy(itemsChosen)

如果有多个嵌套的情况,也可以使用深度复制。


2
多么符合Python风格啊!一旦我可以接受这个答案,我就会感谢你。 - so13eit
请查看 https://dev59.com/FWMm5IYBdhLWcg3wG8DA 了解深拷贝的注意事项。 - heretoinfinity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接