在python中,对象复制实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。
- a = [1,2,3,4,5]
- b = a
- print(a, b)
- >>>[1,2,3,4,5]
- >>>[1,2,3,4,5]
- #改变a,b也跟着改变
- a.append(5)
- print(a, b)
- >>>[1,2,3,4,5,5]
- >>>[1,2,3,4,5,5]
- #改变b,a也跟着改变
- b.append(6)
- print(a, b)
- >>>[1,2,3,4,5,5,6]
- >>>[1,2,3,4,5,5,6]
-
浅拷贝对原对象进行修改后,拷贝后的对象不发生改变,但浅拷贝的子对象进行修改的话,拷贝后的对象会跟着发生改变。总结来讲,浅拷贝之拷贝对象内容,不拷贝子对象
- import copy
- a = [1,2,3,4,5]
- b = copy.copy(a)
- print(a, b)
- >>> [1,2,3,4,5] [1,2,3,4,5]
- a.append(6)
- print(a, b)
- >>>[1,2,3,4,5,6] [1,2,3,4,5] #b不改变
- #但当a存在子对象的时候
- a = [1,2,3,[1]]
- b = a
- a[3].append(2)
- print(a, b)
- >>> a = [1,2,3,[1,2]]
- >>> b = [1,2,3,[1,2]]
-
深拷贝就是拷贝对象及其子对象
- import copy
- a = [1,2,3,[1]]
- b = copy.deepcopy(a)
- a.append(5)
- a[3].append(5)
- print(a, b)
- >>>[1,2,3,[1,5]] [1,2,3,[1]]
-