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

對象的淺拷貝和深拷貝:

  變量的賦值操做函數

    只是造成兩個變量,實際仍是指向同一個對象。測試

  淺拷貝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

相關文章
相關標籤/搜索