Python中赋值、浅复制和深复制的区别

import copy
class Moblephone:
    def __init__(self,cpu,screen):
        self.cpu=cpu
        self.screen=screen
class Cpu:
    def calculate(self):
        print("顶你个肺")
        print("普尼劳改")
class Screen:
    def show(self):
        print("看毛线")
        print("biubiu",self)
print("测试变量赋值")
m1=Cpu()
m2=m1
print(m1)
print(m2)
print("测试浅复制")
m3=Screen()
m4=Moblephone(m1,m3)
m5=copy.copy(m4)
print(m4,m4.cpu,m4.screen)
print(m5,m5.cpu,m5.screen)
print("测试深复制")
m6=copy.deepcopy(m4)
print(m4,m4.cpu,m4.screen)
print(m6,m6.cpu,m6.screen)
#返回值:
##测试变量赋值,地址相同
##<__main__.Cpu object at 0x0000022AF1A686D8>
##<__main__.Cpu object at 0x0000022AF1A686D8>
##测试浅复制,复制的对象地址不同,子对象地址相同
##<__main__.Moblephone object at 0x0000022AF1A68588> <__main__.Cpu object at 0x0000022AF1A686D8> <__main__.Screen object at 0x0000022AF1A68630>
##<__main__.Moblephone object at 0x0000022AF1A68F98> <__main__.Cpu object at 0x0000022AF1A686D8> <__main__.Screen object at 0x0000022AF1A68630>
##测试深复制,对象以及所有的子对象地址都不同
##<__main__.Moblephone object at 0x0000022AF1A68588> <__main__.Cpu object at 0x0000022AF1A686D8> <__main__.Screen object at 0x0000022AF1A68630>
##<__main__.Moblephone object at 0x0000022AF1A688D0> <__main__.Cpu object at 0x0000022AF1A6B6D8> <__main__.Screen object at 0x0000022AF1A6B5C0>

猜你喜欢

转载自blog.csdn.net/qq_24726509/article/details/81181103