Python 中的深拷贝和浅拷贝

时间:2021-10-27 21:58:39

1.深拷贝VS浅拷贝

  • 所谓浅拷贝就是对引用的拷贝 

  (里面的数据不拷贝出来,其中的数据与原对象里面数据用的是相同的地址空间)

  • 所谓深拷贝就是对对象的资源的拷贝

  (里面的数据拷贝出来。深拷贝有自己的存储空间,有自己定义的数据,跟原对象一点关系也没有。连根拔起)

举个例子:

  浅拷贝就是拷贝电影名,深拷贝就是拷贝电影名指向的数据(即可以看的电影)。

 

注意:

对不可变类型的拷贝:

  (1)如果其中全部是不可变类型的数据,copy.copy 与 copy.deepcopy结果相同,都是指向引用

  (2)只要其中有一个可变类型的数据,copy.deepcopy依然是深拷贝,copy.copy 还是指向

  (别漏出可变的破绽,深拷贝拷死你没商量ヾ(◍°∇°◍)ノ゙)

 

2.拷贝的其他方式

  (1)列表切片 属于浅拷贝

d = c[:] 
d = copy.copy(c) 
两者一样, 属于浅拷贝 

  (2)字典 copy方法  属于浅拷贝

  拷贝key,指向和原来相同的 value

 

3.对赋值的认识:

  • 赋值:将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )
  • 修改不可变对象(str、tuple)需要开辟新的空间
  • 修改可变对象(list等)不需要开辟新的空间