python中的深浅拷贝
程序员文章站
2022-04-08 17:17:17
...
- 无复杂子元素
import copy
a = [1, 2, 3, 4]
b = copy.copy(a)
c = copy.deepcopy(a)
d = a
a[0] = 5
print(a, "----", id(a))
print(b, "----", id(b))
print(c, "----", id(c))
print(d, "----", id(d))
"""
输出:
[5, 2, 3, 4] ---- 2015496786184
[1, 2, 3, 4] ---- 2015496786376
[1, 2, 3, 4] ---- 2015496787656
[5, 2, 3, 4] ---- 2015496786184
结论:
无复杂结构时,copy和deepcopy都是重新建立了新的对象,而"="则是对原对象的引用;
"""
- 有复杂子元素
import copy
a1 = [1, 2, [3, 4]]
b1 = copy.copy(a1)
c1 = copy.deepcopy(a1)
d1 = a1
a1[2][0] = 5
print(a1, "----", id(a1))
print(b1, "----", id(b1))
print(c1, "----", id(c1))
print(d1, "----", id(d1))
"""
输出:
[1, 2, [5, 4]] ---- 2869026510408
[1, 2, [5, 4]] ---- 2869026510344
[1, 2, [3, 4]] ---- 2869026510280
[1, 2, [5, 4]] ---- 2869026510408
结论:
copy ---- 只拷贝父对象,不会拷贝对象的内部的子对象;
deepcopy ---- 拷贝父对象以及拷贝对象的内部的子对象;
而"="则是对父对象和内部的子对象的完全引用
"""
上一篇: python中的赋值、浅拷贝、深拷贝
下一篇: C++继承(一) 三种继承方式