一. 前言
在操作变量与数据的时候,我们会直接进行赋值a = b(把b赋值给a),但在a改变的时候,b也改变,怎么才能避免这种情况出现那,我们可以使用python自带的copy()与deepcopy()来进行处理。
二. 可变与不可变数据的认识
mutable : 可变的,如List、Dict
immutable : 不可变的,如Number、String、Tuple、Set
Python赋值操作或函数参数传递,传递的永远是对象引用(即内存地址),而不是对象内容。
三. copy模块的学习
(1)浅拷贝只拷贝最外层对象,深拷贝还会递归拷贝内层对象。
(2)无论是浅拷贝还是深拷贝,只拷贝mutable可变对象成为一个新对象,而immutable不可变对象还是原来的那个。
(3)当顶层对象和它的子元素对象全都是immutable不可变对象时,因为没有产生新对象,所以不存在被拷贝。
3.2 深拷贝
递归拷贝顶层对象,以及它内部的子元素对象
3.2.1顶层是mutable,子元素全是immutable

输出结果:

3.2.2顶层是mutable,子元素部分immutable
import copy
'''
整体id地址不同,内部不可变子元素地址一样,可变子元素地址不同
修改可变子元素深拷贝的对象不会变化
'''

输出结果:

3.2.3顶层是immutable,子元素全是immutable

输出结果:

3.2.3顶层是immutable,子元素部分mutable
import copy
'''
整体id地址不同,内部不变子元素地址一样,可变子元素id不一样
修改a[2],b[2]值不变
'''

输出结果:

总:整体深拷贝的学习可以结合目录三.copy模块学习下的(1)(2)(3)进行对照学习。