今天接触了一个新的名词:深拷贝与浅拷贝
很容易理解,在这里记录一下
浅拷贝,可以理解为拷贝指针
举个例子:
a = [1,2]
b = a
可以这么理解: 创建一个存储区用于存储[1,2],变量a指向存储区的地址
b = a
就是 把b指向a的 地址 ,即把b也指向[1,2]的存储区
如图:
图中可以看到ab对象的id是相同的,也就验证了浅拷贝的原理
再一个 稍微复杂的 例子,对比深拷贝与浅拷贝:
这里可以看到,copy和赋值的 地址有一定的区别,那他们是不是同一类型的拷贝呢?先做个假设:假设他们都是浅拷贝,c和e中的值应该都指向同一个地址,即id(c[1])==id(e[1]):
c[1] 和e[1]如果符合猜想,应该都指向同一个变量b的id
结果已经很明显了
再看深拷贝,新建变量f = copy.deepcopy©
就直接跳开前面的步骤,直接比较最关键的 一步,id(c[1])和id(f[1])
结果如下:
可以看到两者的 结果并不相同
这样,我们可以把深拷贝理解为创建新的存储单元,复制源单元,而浅拷贝仅仅只是复制了源单元的路径,并没有多余的内存占用。