为了账号安全,请及时绑定邮箱和手机立即绑定

浅拷贝、深拷贝和正常作业到底有什么区别?

浅拷贝、深拷贝和正常作业到底有什么区别?

慕雪6442864 2019-06-14 11:08:17
浅拷贝、深拷贝和正常作业到底有什么区别?import copy a=”deepak”b=1,2,3,4c=[1,2,3,4]d={1:10,2:20,3:30}a1=copy.copy(a)b1=copy.copy(b)c1=copy.copy(c)d1=copy.copy(d)print "immutable - id(a)==id(a1)" ,id(a)==id(a1)print "immutable   - id(b)==id(b1)",id(b)==id(b1)print "mutable - id(c)==id(c1)",id(c)==id(c1)print "mutable    - id(d)==id(d1)",id(d)==id(d1)我得到以下结果-immutable - id(a)==id(a1) Trueimmutable   - id(b)==id(b1) Truemutable - id(c)==id(c1) Falsemutable   - id(d)==id(d1) False如果我做深度复制-a1=copy.deepcopy(a)b1=copy.deepcopy(b)c1=copy.deepcopy(c)d1=copy.deepcopy(d)结果是一样的-immutable - id(a)==id(a1) Trueimmutable   - id(b)==id(b1) Truemutable - id(c)==id(c1) Falsemutable   - id(d)==id(d1) False如果我从事外派工作-a1=a b1=b c1=c d1=d结果是-immutable - id(a)==id(a1) Trueimmutable   - id(b)==id(b1) Truemutable - id(c)==id(c1) Truemutable   - id(d)==id(d1) True有人能解释一下到底是什么让拷贝之间有区别吗?它与可变和不变的对象有关吗?如果是的话,你能给我解释一下吗?
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

对于不可变对象,不需要复制,因为数据永远不会改变,因此Python使用相同的数据;ID总是相同的。对于可变对象,由于它们可能会更改,[浅层]复制将创建一个新对象。

深拷贝与嵌套结构有关。如果您有列表,则深度复制copies嵌套列表也是,因此它是一个递归副本。使用复制,您有一个新的外部列表,但内部列表是引用。

任务不复制。它简单地设置了对旧数据的引用。因此,您需要复制来创建一个具有相同内容的新列表。


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 572 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信