总结一下python的浅拷贝和深拷贝.
潜拷贝(shallow copy)
python中潜拷贝指的是:构造一个新的复合对象,然后将原对象中的对象引用插入其中
平常开发过程中潜拷贝是比深拷贝更常见的场景.
比如编程中使用到的一些基本的复合类型(list, dict等)是自带shallow copy函数的,比如下面的例子
from collections import deque
l = [1,2,3]
l.copy()
s = set([1,2,3])
s.copy()
d = {'a':1,'b':2}
d.copy()
q = deque([1, 2, 3])
q.copy()
python官方有copy这个内置的模块来完成潜拷贝和深拷贝.如下例子
from collections import deque
import copy
from dataclasses import dataclass
@dataclass
class Test:
name: str
age: int
def test2():
l = [Test(name='a', age=1), Test(name='b', age=2)]
l_copy = copy.copy(l)
print(id(l))
print(id(l_copy))
l[0].name = 'a_update'
print(l_copy[0].name == l[0].name)
if __name__ == '__main__':
test2()
输出
138121816082688
138121816084736
True
列表类型潜拷贝还可以使用分片语法比如l_copy = l[:]也是潜拷贝.
深拷贝(deep copy)
python中深拷贝是指:构造一个新的复合对象,然后递归地插入原对象中对象的副本
使用copy.deepcopy实现,如下例子:
from collections import deque
import copy
from dataclasses import dataclass
@dataclass
class Test:
name: str
age: int
def test3():
l = [Test(name='a', age=1), Test(name='b', age=2)]
l_copy = copy.deepcopy(l)
print(id(l))
print(id(l_copy))
l[0].name = 'a_update'
print(l_copy[0].name == l[0].name)
if __name__ == '__main__':
test3()
输出结果:
123638090725824
123638090725952
False
1105

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



