首页 > 编程语言 > 详细

《python中的深拷贝和浅拷贝》

时间:2021-03-04 14:57:06      阅读:28      评论:0      收藏:0      [点我收藏+]

首先,我们得知道什么是拷贝?

从生活的角度来说拷贝(copy)就是(原件的复制、复写或模仿)

从程序的角度来说就是(“复制”原有的类容)

在pythonk中的拷贝同理,把原件复制既为拷贝。

举例1:

 代码:

  # 浅拷贝:
  a = [1, 2, 3]
  b = a
  print(id(a))
  print(id(b))
输出结果:

  2168116617864
  2168116617864

(由此可以看出a,b的内存地址不变都是指向[1,2,3]这个列表,此为浅拷贝)

  代码:

  # 深拷贝
  import copy # 导入copy的包

  a = [1, 2, 3, 4, 5]
  b = copy.deepcopy(a)
  print("a的内存地址:", id(a))
  print("b的内存地址:", id(b))
输出结果:

  1696328956616
  1696328954440

(由此可以看出a,b的内存地址改变了,不仅仅是指向同一个列表,而是开辟了一个新的内存空间,此为深拷贝)

举例2:

  
代码:
  import copy
  # 深拷贝
  a = [1, 2, 3, 4, 5]
  b = copy.deepcopy(a)
  print("a:", a)
  a[0] = 0 # 替换a列表中的1为0
  print("a:", a)
  print("b:", b)
输出结果:

  a: [1, 2, 3, 4, 5]
  a: [0, 2, 3, 4, 5]
  b: [1, 2, 3, 4, 5]

(用了深拷贝,b的值并没有改变)
  
代码:
  import copy
  # 浅拷贝
  a = [1, 2, 3, 4, 5]
  b = a
  print("a:", a)
  a[0] = 0 # 替换a列表中的1为0
  print("a:", a)
  print("b:", b)
输出结果: 

  a: [1, 2, 3, 4, 5]
  a: [0, 2, 3, 4, 5]
  b: [0, 2, 3, 4, 5]

(浅拷贝,b的值和a一起改变)


总结:

  deep copy:深拷贝,把要拷贝的对象整体复制一份并存在新开辟的空间里;

  shallow copy:浅拷贝指,对于要拷贝的对象要复制一份,但是对于其内部的子对象就不复制了,而是直接引用;

《python中的深拷贝和浅拷贝》

原文:https://www.cnblogs.com/enkendeboke/p/14478948.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!