變量的賦值操做函數
只是造成兩個變量,實際仍是指向同一個對象。測試
淺拷貝spa
Python拷貝通常都是淺拷貝。拷貝時,對象包含的子對象內容不拷貝。所以,源對象 和拷貝對象會引用同一個子對象。code
深拷貝對象
使用copy模塊的 deepcopy 函數,遞歸拷貝對象中包含的子對象。源對象和拷貝對象 全部的子對象也不一樣。blog
【操做】遞歸
#測試對象的引用賦值,淺拷貝,深拷貝 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對象
運行結果:it
計算。。。。。
CPU對象: <__main__.CPU object at 0x000001504F334F28>
<__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>class