首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python3 : dict构造函数会创建深度副本吗?

Python3 : dict构造函数会创建深度副本吗?
EN

Stack Overflow用户
提问于 2019-11-13 12:45:15
回答 1查看 188关注 0票数 2

我试图在Python3中理解浅拷贝和深拷贝的概念。

从下面的代码中,我发现在dict2中所做的更改并没有在dict1中得到反映。

代码语言:javascript
运行
复制
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上创建了一个深拷贝。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-13 12:52:23

dict "constructor"可以接受一个“映射对象”,在这种情况下,它会创建一个新字典,该字典由映射对象的(键、值)对初始化。

这就是这里发生的事情,因为dict1是一个映射对象。

然而,这并不是一个很深的副本,请看下面的示例:

代码语言:javascript
运行
复制
>>> 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]})
>>>

你知道dict1dict2是如何变化的,即使我只改变了dict1?那是因为他们都指向同一个名单。

在您的示例中,您用一个新列表替换了dict2的列表,这说明了新的dict确实是一个副本,而不仅仅是原始dict的参考。

简单地说:字典本身是“复制”的,但它所包含的内在价值却不是。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58837455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档