示例代码
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)
结论
| 操作 | 和原数据是否指向同一个对象 | 第一层数据为基本类型 | 原数据中包含子对象 |
|---|---|---|---|
| 赋值 | 是 | 改变会使原数据一同改变 | 改变会使原数据一同改变 |
| 浅拷贝 | 否 | 改变不会使原数据一同改变 | 改变会使原数据一同改变 |
| 深拷贝 | 否 | 改变不会使原数据一同改变 | 改变不会使原数据一同 |
文章讲述了Python中的浅拷贝和深拷贝概念,通过示例展示了赋值、浅拷贝(c.copy())和深拷贝(copy.deepcopy())的区别,指出浅拷贝只复制父对象,深拷贝则包括子对象,对数据修改的影响也不同。
514

被折叠的 条评论
为什么被折叠?



