Python的浅复制与深复制

Python的复制分为浅复制和深复制。
浅复制指只复制父对象,不复制内部的子对象。例如list的copy方法、python的直接拷贝
深复制则复制父对象以及内部子对象。copy库的deepcopy方法以及dict的copy方法
浅复制一般用于复制Python内置类型。
例如:

a = 10
b = a
a = a**2
print(a)#a的值已经改变 100
print(b)#b的值没改变 10

但是,如果是复制自定义类型,浅复制没那么好用了
例如

class apple():#继承内部类型浅复制比较好用
    def __init__(self,p):
        self.p = p
    def prize(self,n):
        return self.p*n
a = apple(90)
b = a
print(a.p)# 90
print(a.prize(2)) # 180
a.p = 12
print(a.p) # 12
print(b.p) # 12

当a.p变成12之时,b.p也变成了12。其实,b.p只拷贝了a.p的引用,
b.p的值等于a.p的值。
但是深复制不会出现这种问题
示例

import copy
class apple():#继承内部类型浅复制比较好用
    def __init__(self,p):
        self.p = p
    def prize(self,n):
        return self.p*n
a = apple(90)
b = copy.deepcopy(a)
print(a.p)# 90
print(a.prize(2)) # 180
a.p = 12
print(a.p) # 12
print(b.p) # 90

这次a.p的值不等于b.p的值。如果要复制自定义类型的值,最好选用深复制。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值