本文主要记录对于copy的理解。
一开始感觉比较难懂,但是仔细想想就能想通。一共有三种情况:
1、赋值,形如“b= a”,a和b指向同一个对象,无论是a或者b修改,二者都会变化。
2、浅拷贝,形如“b = copy.copy(a)” 或者“b = a.copy()”,对于b只是复制了a的父对象,但还是指向同一子对象。具体而言,父对象怎么修改都不会变,如果子对象修改就会改变。
什么是子对象呢?自己没有找到合适的解释,但是实验可以看出,数组对象中的另外一个数组对象为子对象。即
a = [1, 2, [3, 4]] 中的a[2]为子对象。
3、深拷贝,形如“c = copy.deepcopy(a)”,对于c完全复制了a的父对象和子对象,a和c是两个完全不同的对象,二者不会互相影响。
实例如下:
>>> a = [1,2,[3,4]] # a[2]为子对象
>>> b = a # 赋值
>>> c = copy.copy(a) # 浅拷贝
>>> d = copy.deepcopy(a) # 深拷贝
进行改变:
>>> a[0] = 5
>>> a[2].append(6)
结果:
>>> a
[5, 2, [3, 4, 6]]
>>> b
[5, 2, [3, 4, 6]] # 完全改变
>>> c
[1, 2, [3, 4, 6]] # 只有子对象改变
>>> d
[1, 2, [3, 4]] # 没有影响