(一)Python入門-6面向對象編程:11對象的淺拷貝和深拷貝
阿新 • • 發佈:2019-05-12
copy 測試 n) phone alc 拷貝 ini 遞歸 顯示 <__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x000001504F39E160>
<__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x000001504F39E630>
計算。。。。。
CPU對象: <__main__.CPU object at 0x000001504F334F28>
計算。。。。。
CPU對象: <__main__.CPU object at 0x000001504F334F28>
<__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x0000015050FC15C0>
計算。。。。。
CPU對象: <__main__.CPU object at 0x0000015050FC1668>
對象的淺拷貝和深拷貝:
變量的賦值操作
只是形成兩個變量,實際還是指向同一個對象。
淺拷貝
Python拷貝一般都是淺拷貝。拷貝時,對象包含的子對象內容不拷貝。因此,源對象 和拷貝對象會引用同一個子對象。
深拷貝
使用copy模塊的 deepcopy 函數,遞歸拷貝對象中包含的子對象。源對象和拷貝對象 所有的子對象也不同。
【操作】
#測試對象的引用賦值,淺拷貝,深拷貝 import copy class MobilePhone: def __init__(self,cpu,screen): self.cpu= cpu self.screen = screen class CPU: def calculate(self): print(‘計算。。。。。‘) print(‘CPU對象:‘,self) class Screen: def show(self): print(‘顯示。。。。。‘) print(‘屏幕對象:‘,self) c = CPU() s = Screen() m = MobilePhone(c,s) m.cpu.calculate() n= m #兩個變量n,m,但是指向的是同一對象 print(n,m) m2 = copy.copy(m) #m2是新拷貝的另一個手機對象,m2,m指向的是不同的對象 print(m,m2) m.cpu.calculate() m2.cpu.calculate() #m2和m擁有了同一個cpu對象和screen對象 m3 = copy.deepcopy(m) print(m,m3) m3.cpu.calculate() #m3和m擁有不同的cpu對象和screen對象
運行結果:
計算。。。。。
CPU對象: <__main__.CPU object at 0x000001504F334F28>
<__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x000001504F39E630>
計算。。。。。
CPU對象: <__main__.CPU object at 0x000001504F334F28>
計算。。。。。
CPU對象: <__main__.CPU object at 0x000001504F334F28>
<__main__.MobilePhone object at 0x000001504F39E160> <__main__.MobilePhone object at 0x0000015050FC15C0>
計算。。。。。
CPU對象: <__main__.CPU object at 0x0000015050FC1668>
(一)Python入門-6面向對象編程:11對象的淺拷貝和深拷貝