1. 如下代码测试对象的浅拷贝、深拷贝,请绘制出内存示意图。
import copy
class 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 # 单纯地引用,没有任何辅助,因为开始的地址一样
print(c1)
print(c2)
s1 = Screen()
m1 = MobilePhone(c1,s1)
m2 = copy.copy(m1) # 浅复制,复制本身,后面都是引用,最开始的地址不同,但内部的地址全部相同
print(m1,m1.cpu,m1.screen)
print(m2,m2.cpu,m2.screen)
m3 = copy.deepcopy(m1) # 深复制,复制一套体系,所有地址都不相同
print(m1,m1.cpu,m1.screen)
print(m3,m3.cpu,m3.screen)
运行结果如下
<__main__.Cpu object at 0x0000023408ABA5C8>
<__main__.Cpu object at 0x0000023408ABA5C8>
<__main__.MobilePhone object at 0x0000023408B1AB08> <__main__.Cpu object at 0x0000023408ABA5C8> <__main__.Screen object at 0x0000023408B1AA88>
<__main__.MobilePhone object at 0x0000023408B1AB48> <__main__.Cpu object at 0x0000023408ABA5C8> <__main__.Screen object at 0x0000023408B1AA88>
<__main__.MobilePhone object at 0x0000023408B1AB08> <__main__.Cpu object at 0x0000023408ABA5C8> <__main__.Screen object at 0x0000023408B1AA88>
<__main__.MobilePhone object at 0x000002340