当前位置: 首页 > 后端技术 > Python

Python:类对象的赋值、深拷贝、浅拷贝

时间:2023-03-26 15:45:04 Python

赋值操作只形成两个变量,实际上指向同一个对象,变量存储的是对象的引用。classCPU:pass#变量赋值cpu1=CPU()cpu2=cpu1print(cpu1)#<__main__.CPUobjectat0x0000017B21356460>print(cpu2)#<__main__.CPUobjectat0x0000017B21356460>ShallowcopyPython拷贝一般都是浅拷贝,复制的时候,对象中包含的子对象的内容不会被复制,因此,源对象和复制对象将引用同一个子对象。(只复制主对象,子对象仍然引用同一个对象。)importcopyascpclassCPU:passclassDisk:passclassComputer:def__init__(self,cpu,disk):self.cpu=cpuself.disk=disk#类对象的浅拷贝cpu1=CPU()disk=Disk()computer=Computer(cpu1,disk)computer2=cp.copy(computer)print(computer,computer.cpu,computer.disk)#<__main__.Computer对象在0x000002365C8ACBB0><__main__.CPU对象在0x000002365C8ACD90><__main__.Disk对象在0x000002365C8AC430>打印(Computer2,Computer2.cpu,Computer2.disk)#<__main__.computer对象,at0x000002365c9d65e0><__main__.main__.cpuat0x000002365c8c8acd90>对象及其包含的子对象,源对象和副本对象以及所有子对象都是不同的。importcopyclassCPU:passclassDisk:passclassComputer:def__init__(self,cpu,disk):self.cpu=cpuself.disk=disk#类似的深贝cpu1=CPU()disk=Disk()computer=Computer(cpu1,disk)computer3=copy.deepcopy(computer)print(computer,computer.cpu,computer.disk)#<__main__.Computerobjectat0x000002365C8ACBB0><__main__.CPUobjectat0x000002365C8ACD90><__main__.Diskobjectat0x000002365C8AC430>print(computer3,computer3.cpu,computer3.disk)#<__main__.Computerobjectat0x00000180BA7E3340><__main__.CPUobjectat0x00000180BA7FB100><__main__.Diskobjectat0x00000180BA7FB130>