Python 中,将对象进行赋值的方式共有三种:
直接赋值:直接将对象的引用赋值给等号左边的对象。浅拷贝:复制一份父对象,但不会复制父对象内部子对象。深拷贝:既复制父对象,也复制子对象。下面具体来说明。
可以发现,a 与 b 都指向同一个对象,如图所示: 当给列表 b 添加元素 3 以后: 当给列表 a 中的子列表添加元素 3 后:
浅拷贝过程如图所示。可以发现,a 与 b 所指向的父对象是各自独立的,但是 a 与 b 中的子对象仍为同一个对象: 当给列表 a 添加元素 3 后: 当为列表 a 中的子列表添加元素 3 后:
深拷贝需要用到 Python 自带的 copy 模块。
>>> import copy >>> a = [1, 2, [1, 2]] >>> b = copy.deepcopy(a) >>> a;b [1, 2, [1, 2]] [1, 2, [1, 2]] >>> a.append(3) >>> a;b [1, 2, [1, 2], 3] [1, 2, [1, 2]] >>> b.append(4) >>> a;b [1, 2, [1, 2], 3] [1, 2, [1, 2], 4] >>> a[2].append(3) >>> b[2].append(4) >>> a;b [1, 2, [1, 2, 3], 3] [1, 2, [1, 2, 4], 4]深拷贝过程如图所示,可以看到 b 完全拷贝了 a 的父对象以及子对象: 深拷贝示例代码执行完毕后,结果如图所示: