我有以下Python代码在我试图在字典实现浅拷贝操作:浅拷贝
d = {'name':'Subhayan','age':32,'friends':['papa','mama']}
new_d = d.copy()
new_d['friends'] = []
print (d)
print (new_d)
现在按照我的理解,如果有一个嵌套的数据结构像列表在我的情况下浅副本将无法正常工作。 new_d字典中的变化也会影响字典。
有人可以告诉我,如果我的理解是正确的吗?
运行此脚本后得到的答案是不同的。
{'name': 'Subhayan', 'age': 32, 'friends': ['papa', 'mama']}
{'name': 'Subhayan', 'age': 32, 'friends': []}
显然这是在做一个深层次的拷贝。
我去哪里错了?
是的,引用不是作为d.copy()的一部分“深度复制”的。 如果您也想复制它们,则需要使用copy.deepcopy(d)。 否则,如果你想有一个“空”的引用,你将不得不实现自己的副本功能.... – Aviad
记住执行一个赋值,它将一个新对象绑定到一个名称和执行与名称绑定的现有对象上的突变。看看你做这个变种时会发生什么'new_d ['friends'] [:] = []'。 –