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等)不需要开辟新的空间