python对象的浅拷贝和深拷贝

(1)浅拷贝:

python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象和拷贝对象会引用同一个子对象。

浅拷贝相当于将之前的对象本身进行拷贝,而其属性或方法(也是对象)没有拷贝,仍指向原来的地址,引用的是同一个子对象

(2)深拷贝:

使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不同

深拷贝将之前的对象本身进行拷贝,同时拷贝其子对象(包含属性或方法(也是对象))

import  copy
class Mobilephone: #Mobilephone类
      def __init__(self,cpu,screen):
          self.cpu=cpu
          self.screen=screen
class CPU:
    def calculate(self):
        print("cpu对象",self)

class Screen:
    def show(self):
        print("显示屏幕内容",self)
c1=CPU()
c2=c1
s1=Screen()

#测试浅拷贝
print("浅拷贝...")
m1=Mobilphone(c1,s1)
m2=copy.copy(m1)
print(m1,m1.cpu,m1.screen)#测试发现浅拷贝后,m1和m2的地址不一致,但是子对象的地址却是一样的
print(m2,m2.cpu,m2.screen)

#测试深拷贝
print("深拷贝...")
m3=copy.deepcopy(m1)
print(m1,m1.cpu,m1.screen)#测试发现深拷贝后,m1和m2的地址不一致,子对象的地址也是不一样的
print(m3,m3.cpu,m3.screen)

#浅拷贝...
‘‘‘<__main__.Mobilphone object at 0x00000000021BDB70> <__main__.CPU object at 0x0000000002118320> <__main__.Screen object at 0x0000000002118438>
<__main__.Mobilphone object at 0x00000000021BD748> <__main__.CPU object at 0x0000000002118320> <__main__.Screen object at 0x0000000002118438>
深拷贝...
<__main__.Mobilphone object at 0x00000000021BDB70> <__main__.CPU object at 0x0000000002118320> <__main__.Screen object at 0x0000000002118438>
<__main__.Mobilphone object at 0x00000000021DBA90> <__main__.CPU object at 0x00000000021DBB38> <__main__.Screen object at 0x00000000021DBBA8>’’’

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值