Python淺拷貝和深拷貝以及內存分析

淺拷貝和深拷貝

深入瞭解參數傳遞的底層原理,需要理解一下“淺拷貝和深拷貝”,拷貝的內置函數爲:copy(淺拷貝)、deepcopy(深拷貝)

淺拷貝:不拷貝子對象的內容,只是拷貝子對象的引用。

深拷貝:會連子對象的內存也全部拷貝一份,對子對象的修改不會影響源對象

例子:

import copy

def testcopy():
    '''測試淺拷貝'''
    a=[11,22,[33,44]]
    b=copy.copy(a)
    
    print("a",a)
    print("b",b)
    
    b.append(55)
    b[2].append(66)
    print('淺拷貝')
    print('a',a)
    print('b',b)
testcopy()

返回:

>>>a [11, 22, [33, 44]]
      b [11, 22, [33, 44]]
      淺拷貝
      a [11, 22, [33, 44, 66]]
      b [11, 22, [33, 44, 66], 55]

注:可以從結果看到,淺拷貝b修改子元素時,源對象也跟着修改了。根據圖可以看到,淺拷貝只拷貝第一層引用地址,之後引用還是使用原引用地址沒有發生改變。如圖:

深拷貝示例:

def testdeepcopy():
    '''測試深拷貝'''
    a = [11, 22, [33, 44]]
    b = copy.deepcopy(a)

    print("a", a)
    print("b", b)

    b.append(55)
    b[2].append(66)
    print('深拷貝')
    print('a', a)
    print('b', b)


testdeepcopy()

返回值:

>>>a [11, 22, [33, 44]]
      b [11, 22, [33, 44]]
     深拷貝
     a [11, 22, [33, 44]]
     b [11, 22, [33, 44, 66], 55]

注:根據所示可以看出,深拷貝是把有關對象指向全部拷貝一份。深拷貝b修改數據時,將不會修改a任何數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章