python中copy和deepcopy 的區別

請簡述賦值, 深拷貝和淺拷貝的區別?(python中如何拷貝一個對象?)
直接賦值(li1 = li): 只傳遞對象的引用, li1指向對象li的內存地址空間,
所以, 原有列表li改變, 被賦值的li1也會作相應的改變.python

  • 淺拷貝:li和li2的內存地址不一樣,
    可是子對象的內存地址相同, 所以,原始數據改變 , 子對象也改變.\
  • 深拷貝(import copy, eg: li3=copy.deepcopy(li)), li和li3的內存地址不一樣,
    包含子對象的拷貝, 因此原始對象改變並不會形成深拷貝里面任何子項的改變.

當深拷貝和淺拷貝, 針對的對象所有是不可變數據類型時, 二者效果相同;
當深拷貝和淺拷貝, 針對的對象包含是可變數據類型時, 二者纔有上述區別;ide

#全部的數值類型和布爾類型, str是不可變數據類型,
#list是可變數據類型;對象

#淺拷貝的實現:
#- li.copy()
#- li[:]
#- copy.copy(li)內存

#實現深拷貝:
#- copy.deepcopy(li)it

若是copy.copy)拷貝的是元組,那麼它不會進行淺拷貝,僅僅是指向
由於元組是不可變數據類型,那麼意味着數據必定不能修改,
所以copy.copy()
的時候它會自動判斷是指向class

若是,用copy.copy() copy.deepcopy()對一個所有是不可變類型
的數據進行數據拷貝的時候,那麼它們的結果相同,都是引用import

若是拷貝的是一個擁有可變類型的數據,那麼deepcopy依然是深拷貝,
copy是淺拷貝變量

檔一個變量==xx的時候,約定爲:指向地址的過程
淺拷貝:copy.copy()
深拷貝:copy.deepcopy()數據類型

相關文章
相關標籤/搜索