我试图在Python3中理解浅拷贝和深拷贝的概念。
从下面的代码中,我发现在dict2中所做的更改并没有在dict1中得到反映。
1>>> dict1 = {1:[1,2]}
2>>> dict2 = dict(dict1)
3>>> dict2[1]=[1,2,3]
4>>> dict1,dict2
({1: [1, 2]}, {1: [1, 2, 3]})我是否正确地理解了在上面的代码中在line#2上创建了一个深拷贝。
发布于 2019-11-13 12:52:23
dict "constructor"可以接受一个“映射对象”,在这种情况下,它会创建一个新字典,该字典由映射对象的(键、值)对初始化。
这就是这里发生的事情,因为dict1是一个映射对象。
然而,这并不是一个很深的副本,请看下面的示例:
>>> dict1 = {1:[1,2]}
>>> dict2 = dict(dict1)
>>> dict1,dict2
({1: [1, 2]}, {1: [1, 2]})
>>> dict1[1].append(4)
>>> dict1,dict2
({1: [1, 2, 4]}, {1: [1, 2, 4]})
>>>你知道dict1和dict2是如何变化的,即使我只改变了dict1?那是因为他们都指向同一个名单。
在您的示例中,您用一个新列表替换了dict2的列表,这说明了新的dict确实是一个副本,而不仅仅是原始dict的参考。
简单地说:字典本身是“复制”的,但它所包含的内在价值却不是。
https://stackoverflow.com/questions/58837455
复制相似问题