示例代码
import copy
a=[[0,1,2,3],[4,5,6,7],[8,9,10,11]]
b=a #赋值,相当于给a起了别名为b
c=a.copy() #浅拷贝
d=copy.deepcopy(a) #深拷贝
a[0][1]+=1
a.append([12,13,14,15])
print("a:",a)
print("b:",b)
print("c:",c)
print("d:",d)
输出结果
a: [[0, 2, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
b: [[0, 2, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
c: [[0, 2, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
d: [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
解释:
- 赋值:b=a,给a起了个别名为b
-
浅拷贝c=a.copy()
只拷贝父对象,子对象不拷贝
-
深拷贝:d=copy.deepcopy(a)
父类对象和子类对象都拷贝
图3.深拷贝 d=copy.deepcopy(a)
结论
操作 | 和原数据是否指向同一个对象 | 第一层数据为基本类型 | 原数据中包含子对象 |
---|---|---|---|
赋值 | 是 | 改变会使原数据一同改变 | 改变会使原数据一同改变 |
浅拷贝 | 否 | 改变不会使原数据一同改变 | 改变会使原数据一同改变 |
深拷贝 | 否 | 改变不会使原数据一同改变 | 改变不会使原数据一同 |