第九章2 面向对象的程序设计

2024-01-08 18:21:25

类的深拷贝和浅拷贝 p122

变量的赋值:只是形成两个变量,实际上还是指向同一个对象

浅拷贝:会产生一个新对象;拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

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

代码实例:

class Cpu():
    pass

class Disk():
    pass

class Computer():
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk

cpu=Cpu()
disk=Disk()

com=Computer(cpu,disk)

com1=com

# 对象复赋值后,指向的内存地址不变
print(com) # 以十六进制打印对象的内存地址
print(com1)

print(id(com)) # 以十进制打印对象的内存地址
print(id(com1))

# 子对象的变化
print(com,'子对象的内存地址:',com.cpu,com.disk)
print(com1,'子对象的内存地址:',com1.cpu,com1.disk)
# 拷贝产生的新对象没有开心的内存,还是指向原来的内存

print('类对象的浅拷贝','-'*66)

# 类对象的浅拷贝
import copy
com2=copy.copy(com) # com2是新产生的对象,com2的子对象,cpu,disk不变

print(com)
print(com2) # 新老对象不同,开了新内存
print()
print(com.cpu)
print(com2.cpu) # 相同
print()
print(com.disk)
print(com2.disk) # 相同

print('类对象的深拷贝','-'*66)

# 类对象的深拷贝,子对象也会被重新创建
com3=copy.deepcopy(com)

print(com)
print(com3) # 新老对象不同,开了新内存
print()
print(com.cpu)
print(com3.cpu) # 不相同
print()
print(com.disk)
print(com3.disk) # 不相同

文章来源:https://blog.csdn.net/engineer0/article/details/135461243
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。