1. 程式人生 > 其它 >Python入門基礎篇 No.83 —— 物件的淺拷貝和深拷貝_組合

Python入門基礎篇 No.83 —— 物件的淺拷貝和深拷貝_組合

技術標籤:# 基礎python程式語言windows經驗分享程式人生

Python入門基礎篇 No.83 —— 物件的淺拷貝和深拷貝_組合


文章目錄

前生篇:特殊方法和運算子過載_特殊屬性


前言

在這裡插入圖片描述


一、物件的淺拷貝和深拷貝

  • 變數的賦值操作

只是形成兩個變數,實際還是指向同一個物件。

  • 淺拷貝

Python 拷貝一般都是淺拷貝。拷貝時,物件包含的子物件內容不拷貝。因此,源物件和拷貝物件會引用同一個子物件。

  • 深拷貝

使用 copy 模組的 deepcopy 函式,遞迴拷貝物件中包含的子物件。源物件和拷貝物件所有的子物件也不同。

程式碼演示:

# 測試物件的引用賦值、淺拷貝、深拷貝
import copy


class MobilePhone:
    def __init__(self, cpu, screen):
        self.cpu = cpu
        self.screen = screen


class CPU:
    def calculate(self):
        print("計算,12345")
        print("CPU物件:", self)


class Screen:
    def show(self):
print("顯示一個好看的畫面") print("螢幕物件:", self) c = CPU() s = Screen() m = MobilePhone(c, s) m.cpu.calculate() n = m # 兩個變數,但是指向了同一個物件 print(m, n) m2 = copy.copy(m) # m2是新拷貝的另一個手機物件 print(m, m2) m.cpu.calculate() m2.cpu.calculate() # m2和m擁有了一樣的cpu物件和screen物件 m3 =
copy.deepcopy(m) m3.cpu.calculate() # m3和m擁有不一樣的cpu物件和screen物件 ---------------------------------------- 計算,12345 CPU物件: <__main__.CPU object at 0x00000218FBB1F850> <__main__.MobilePhone object at 0x0000021894924EB0> <__main__.MobilePhone object at 0x0000021894924EB0> <__main__.MobilePhone object at 0x0000021894924EB0> <__main__.MobilePhone object at 0x00000218FB9B6670> 計算,12345 CPU物件: <__main__.CPU object at 0x00000218FBB1F850> 計算,12345 CPU物件: <__main__.CPU object at 0x00000218FBB1F850> 計算,12345 CPU物件: <__main__.CPU object at 0x0000021894AC3820>

在這裡插入圖片描述

二、組合

  • “is-a”關係,我們可以使用“繼承”。從而實現子類擁有的父類的方法和屬性。“is-a”關係指的是類似這樣的關係:狗是動物,dog is animal。狗類就應該繼承動物類。
  • “has-a”關係,我們可以使用“組合”,也能實現一個類擁有另一個類的方法和屬性。”has-a”關係指的是這樣的關係:手機擁有 CPU。 MobilePhone has a CPU。

程式碼演示:

# 測試物件的引用賦值、淺拷貝、深拷貝


class MobilePhone:
    def __init__(self, cpu, screen):
        self.cpu = cpu
        self.screen = screen


class CPU:
    def calculate(self):
        print("計算,12345")


class Screen:
    def show(self):
        print("顯示一個好看的畫面")


c = CPU()
s = Screen()
m = MobilePhone(c, s)

m.cpu.calculate()  # 通過組合,我們也能呼叫cpu物件的方法。相當於手機物件簡介擁有了“cpu”方法
m.screen.show()
--------------------------
計算,12345
顯示一個好看的畫面

在這裡插入圖片描述


總結

以上幫各位總結好了,收藏,關注即可查收。

前生篇:特殊方法和運算子過載_特殊屬性


關注下方公眾號,免費拿Python學習資料!!!

在這裡插入圖片描述