python之浅拷贝深拷贝


总结一下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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值