python深拷贝浅拷贝区别


记录下尚学堂400集python的学习

浅拷贝示意图

首先创建列表a:
a = [100,200,[300,400]]
列表a在内存中如下图:python深拷贝浅拷贝区别
用浅拷贝把a拷贝给b:
b = copy.copy(a)
列表a、b在内存中如下图:
python深拷贝浅拷贝区别
给b添加一项500:
b.append(500)
列表a、b在内存中如下图:
python深拷贝浅拷贝区别
此时打印a和b:
print(“a”,a)
print(“b”,b)
输出结果:
python深拷贝浅拷贝区别
显然图上可以看出a没有指向500的。
向a[2]中加入一项600
a[2].append(600)
列表a、b在内存中如下图:
python深拷贝浅拷贝区别
打印a、b项:
print(“a”,a)
print(“b”,b)
输出结果:
python深拷贝浅拷贝区别

深拷贝示意图

首先创建列表a:
a = [100,200,[300,400]]
列表a在内存中如下图:python深拷贝浅拷贝区别
用深拷贝把a拷贝给b:
b = copy.deepcopy(a)
列表a、b在内存中如下图:
python深拷贝浅拷贝区别
相当于就是把a从头到尾都复制了一边。
向a中加入一项500
a.append(500)
打印输出结果:
python深拷贝浅拷贝区别
向b加入一项500
b.append(500)
打印输出结果
python深拷贝浅拷贝区别
显而易见现在对a、b的操作都是互不相干的了,相当于对两个对象进行操作。

总结

浅拷贝
拷贝的只是原始对象元素的引用,换句话说,浅拷贝产生的对象本身是新的,但是它的内容不是新的,只是对原对象的一个引用。
深拷贝
是指完全拷贝原始对象,而且产生的对象是新的,并且不受其他引用对象的操作影响。
通俗的说
浅拷贝就只是相当于克隆了一个人,深拷贝相当于不仅克隆了这个人还克隆了这个人的家庭,把他的儿子孙子都复制了一份。

相关文章:

  • 2018-09-30
  • 2018-03-07
  • 2019-06-29
  • 2020-05-03
  • 2019-09-16
  • 2017-12-14
  • 2018-06-14
  • 2018-12-10
猜你喜欢
  • 2018-09-29
  • 2020-09-27
  • 2021-08-24
  • 2019-03-06
  • 2021-08-01
  • 2019-10-31
  • 2018-12-03
  • 2020-10-17
相关资源
相似解决方案