深拷贝和浅拷贝的应用场景(编码基础知识库)
深拷贝和浅拷贝的应用场景(编码基础知识库)
变量的赋值操作是如何进行的? 只是形成了两个变量,但实际上还是指向了同一个对象
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self cpu disk):
self.cpu = cpu
self.disk = disk
# (1)变量的赋值操作
cpu1 = CPU()
cpu2 = cpu1
print('原始变量值cpu1:' cpu1 id(cpu1) '\n赋值变量值cpu2:' cpu2 id(cpu2))
Python代码中的拷贝一般都是浅拷贝。程序代码拷贝时,不对对象所包含的子对象的内容进行拷贝。
因此,在实际开发代码中,源对象与拷贝对象都会引用同一个子对象。
# (2)类的浅拷贝
disk = Disk() # 创建一个硬盘类的对象
print('硬盘类对象原始值:' disk)
computer = Computer(cpu1 disk) # 创建一个计算机类的对象
import copy
computer1 = copy.copy(computer)
print('computer原始值:' computer computer.cpu computer.disk)
print('computer浅拷贝:' computer1 computer1.cpu computer1.disk)
Python中使用copy模块的 deepcopy() 函数,递归拷贝对象中所包含的子对象。此时,源对象和拷贝
所拥有的子对象也不相同。
# 类的深拷贝
computer2 = copy.deepcopy(computer)
print('computer原始值:' computer computer.cpu computer.disk)
print('computer深拷贝:' computer2 computer2.cpu computer2.disk)