python直接賦值、深淺拷貝實例剖析

根據數據類型分爲兩部分進行剖析:css

  • int、str類型     
  • list、tuple、dict類型等

1.  int、str類型app

【int類型實例】
>>> import copy                        # 導入copy模塊
>>> a1=11
>>> a2=a1                              # 直接賦值引用
>>> a3=copy.copy(a1)                   # 淺拷貝
>>> a4=copy.deepcopy(a1)               # 深拷貝
>>> id(a1),id(a2),id(a3),id(a4)
>>> (1357559168, 1357559168,1357559168,1357559168)                            


【str類型實例】
>>> import copy                         # 導入copy模塊
>>> b1='css'
>>> b2=b1                               # 直接賦值引用
>>> b3=copy.copy(b1)                    # 淺拷貝
>>> b4=copy.deepcopy(b1)                # 深拷貝
>>> id(b1), id(b2),id(b3),id(b4)
>>> (43826624,43826624,43826624,43826624)

由以上實例可得出:int和str類型,不管是直接賦值引用 or 深淺拷貝,均指向同一塊內存空間,所以對於int和str類型的變量而言,三種方法做用相同spa

2. list、tuple、dict等類型(以list類型爲例code

【示例】
>>> import copy                          # 導入copy模塊
>>> L1=[11,22,33,['a','b','c']]      # 定義list變量,其中L1[3]的值是一個子列表
>>> L2=L1                                 # 直接賦值引用
>>> L3=copy.copy(L1)                # 淺拷貝
>>> L4=copy.deepcopy(L1)         # 深拷貝
>>> id(L1),id(L2),id(L3),id(L4)
>>> (43777928,43777928,43776968,43795912)
>>> L1.append(44)                    # L1列表父對象添加元素
>>> L1[3].append('d')                # L1列表子對象添加元素
>>> L1
>>> [11,22,33,['a','b','c','d'],44]
>>> L2
>>> [11,22,33,['a','b','c','d'],44]
>>> L3
>>> [11,22,33,['a','b','c','d']]
>>> L4
>>> [11,22,33,['a','b','c']]

以上示例說明:對象

1. 直接賦值便是對象的引用,指向同一內存地址blog

2. 淺拷貝:只拷貝一層,如上述示例,只拷貝父對象,不拷貝父對象內部的子對象(L3[3]仍指向原L1子對象的內存地址),故分別在L1父對象和子對象中添加元素44和'd', 對L3父對象無影響,只對其子對象有影響內存

3. 深拷貝:拷貝父對象及子對象class

相關文章
相關標籤/搜索