1. 程式人生 > >(一)Python入門-6面向對象編程:11對象的淺拷貝和深拷貝

(一)Python入門-6面向對象編程:11對象的淺拷貝和深拷貝

copy 測試 n) phone alc 拷貝 ini 遞歸 顯示

對象的淺拷貝和深拷貝:

  變量的賦值操作

    只是形成兩個變量,實際還是指向同一個對象。

  淺拷貝

    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 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入門-6面向對象編程:11對象的淺拷貝和深拷貝