python对象的浅拷贝和深拷贝

本文深入探讨了Python中的浅拷贝和深拷贝概念,通过实例演示了两种拷贝方式的区别,特别是在对象引用和子对象拷贝方面的差异。浅拷贝仅复制对象本身,而深拷贝则递归复制所有子对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(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>’’’

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值