python中的深浅拷贝,python中深浅拷贝的区别

  python中的深浅拷贝,python中深浅拷贝的区别

  

  一、浅拷贝

  浅层副本是对象的顶级副本。通俗地说,就是抄袭了参考文献但没有抄袭内容。

  a=[1,2,3]

  打印(id(a))

  b=a

  打印(b)

  打印(id(b))

  a .追加(4)

  打印(一份)

  打印(b)操作的结果是:

  1965053928072

  [1,2,3]

  1965053928072

  [1,2,3,4]

  [1,2,3,4]二、深拷贝

  深度复制是指在所有级别复制一个对象,内存地址被重新打开。

  导入副本

  a=[1,2,3]

  打印(id(a))

  #使用复制模块

  b=copy.deepcopy(a)

  #打印b的内存地址。

  打印(id(b))

  a .追加(4)

  打印(一份)

  打印(b)操作的结果是:

  2035157969672

  2035158105992

  [1,2,3,4]

  [1,2,3]相关推荐:《Python视频教程》

  三、深浅拷贝对比

  导入副本

  a=[1,2,3]

  b=[4,5,6]

  c=[甲,乙]

  D=c#直接赋值,浅层复制

  print( c 的内存地址是:%s%id(c))

  打印( d的内存地址是:%s%id(d))

  #使用复制模块

  #深度复制,重新打开内存,内容独立。

  e=copy.deepcopy(c)

  #深度复制,重新打开内存,但原引用仍保存在新内容中。

  f=copy.copy(c)

  #打印E,f的地址。

  print(e的内存地址是:%s%id(e))

  print(f的内存地址是:%s%id(f))

  #更改a的值

  a .追加(44)

  #打印a、b、c、d、e、f

  打印( a=%s%a

  打印( b=%s%b )

  打印( c=%s%c )

  打印( d=%s%d )

  打印( e=%s%e )

  Print(f=%s%f )按如下方式运行:

  c的内存地址是:2514746494856

  d的内存地址是:2514746494856

  e的内存地址是:2514746494920。

  f的内存地址是:2514746494664

  a=[1,2,3,44]

  b=[4,5,6]

  c=[[1,2,3,44]、[4,5,6]]

  d=[[1,2,3,44]、[4,5,6]]

  e=[[1,2,3]、[4,5,6]]

  F=[[1,2,3,44],[4,5,6]]描述:

  1.C和D的内存地址相同,说明是浅拷贝,两个引用指向同一块内存。

  2.C、E、F的内存地址是不一样的,也就是说E和F都是深度副本,都是新打开的内存地址。

  3.元素44加到A后,打印的E有一个加44,表示深层副本在内容上是独立的。

  4.在将元素44添加到A之后,44也被添加到打印的F,这意味着F也重新打开了内存,但是原始引用被保存在新内容中。

  四、copy对可变和不可变对象的不同

  1.变量类型使用复制。

  导入副本

  a=[1,2,3]

  b=copy.copy(a)

  打印(id(a))

  打印(id(b))

  a .追加(4)

  打印(一份)

  打印(b)操作的结果是:

  1626677717832

  1626677715784

  [1,2,3,4]

  [1,2,3]2.对不可变类型使用复制。

  导入副本

  a=(1,2,3)

  b=copy.copy(a)

  打印(id(a))

  打印(id(b))的结果是:

  2043444280704

  2043444280704总结:

  简单的作业是浅显的抄写。

  复制模块中的copy()函数可以进行深度复制。尽管打开了一个新的存储器,但原始参考仍然存储在新的存储器中。

  复制模块中的deepcopy()函数是深度复制,它重新打开内存,新值保存在内存中。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: