python浅拷贝copy.copy()与深拷贝copy.deepcopy()

import copy#导入copy模块
class MobilePhone:#定义MobilePhone类。解释器执行 class 语句,创建一个类名为MobilePhone的对象。
    def __init__(self,cpu,screen):#定义构造函数__init__()方法,用来初始化实例对象的实例属性
        self.cpu=cpu#实例(instance)属性,属于实例对象
        self.screen=screen
class CPU:#定义CPU类
    def calculate(self):#实例方法,方法调用时,通过对象来调用。
        print('计算666')
        print('CPU对象:',self)
class SCREEN:#定义SCREEN类
    def show(self):
        print('显示画面,闪闪亮')
        print('屏幕对象' ,self)
c=CPU()#创建CPU的实例对象c
s=SCREEN()#创建SCREEN的实例对象s
m=MobilePhone(c,s)
#m是MobilePhone类的实例对象,自动调用构造函数__init__()方法,将c和s两个对象赋值给MobilePhone中的cpu和screen属性。
# 如果没有m,MobilePhone、CPU、SCREEN三个类就是独立的。

print(m,m.cpu,m.screen)
m.cpu.calculate()
m.screen.show()

print('1.测试变量赋值:')#两者ID一样(给变量进行赋值,都指向对象的ID)
n1=m
print(n1,n1.cpu,n1.screen)
n1.cpu.calculate()
n1.screen.show()

print('2.测试浅复制:')#拷贝最外层时,开辟新的内存,建立新的外层ID;拷贝内层时,不会开辟内存,仍指向原来内存值的ID,跟随原来内存值的变化发生变化。Python拷贝一般都是浅拷贝。
n2=copy.copy(m)
print(n2,n2.cpu,n2.screen)
n2.cpu.calculate()
n2.screen.show()

print('3.测试深复制:')#拷贝时,递归拷贝对象中包含的子对象,最外层和内层都开辟新的内存,建立新的内外层ID,不受原来内存值变化的影响。
n3=copy.deepcopy(m)
print(n3,n3.cpu,n3.screen)
n3.cpu.calculate()
n3.screen.show()

python浅拷贝copy.copy()与深拷贝copy.deepcopy()_第1张图片

python浅拷贝copy.copy()与深拷贝copy.deepcopy()_第2张图片

你可能感兴趣的:(浅copy,深拷贝deepcopy,python)