1. 程式人生 > 其它 >Python入門基礎篇 No.57 —— 淺拷貝和深拷貝_傳遞不可變物件包含的子物件是可變的情況

Python入門基礎篇 No.57 —— 淺拷貝和深拷貝_傳遞不可變物件包含的子物件是可變的情況

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

Python入門基礎篇 No.57 —— 淺拷貝和深拷貝_傳遞不可變物件包含的子物件是可變的情況


文章目錄

前生篇:引數的傳遞_傳遞可變物件_傳遞不可變物件


前言

在這裡插入圖片描述


一、淺拷貝和深拷貝

  • 為了更深入的瞭解引數傳遞的底層原理,我們需要講解一下“淺拷貝和深拷貝”。我們可以使用內建函式:copy(淺拷貝)、deepcopy(深拷貝)。

淺拷貝:不拷貝子物件的內容,只是拷貝子物件的引用。

深拷貝:子物件的記憶體也全部拷貝一份,對子物件的修改不會影響源物件。

程式碼演示:

# 測試淺拷貝和深拷貝

import copy

def testCopy():
    '''測試淺拷貝'''
    a = [10,20,[5,6]]
    b = copy.copy(a)

    print('a',a)
    print('b',b)
    b.append(30)
    b[2].append(7)
    print("淺拷貝······")
    print('a'
,a) print('b',b) def testDeepCopy(): '''測試深拷貝''' a = [10, 20, [5, 6]] b = copy.deepcopy(a) print('a',a) print('b',b) b.append(30) b[2].append(7) print("深拷貝......") print('a', a) print('b', b) testCopy() print('$'*30) testDeepCopy() ---------------
-------------- a [10, 20, [5, 6]] b [10, 20, [5, 6]] 淺拷貝······ a [10, 20, [5, 6, 7]] b [10, 20, [5, 6, 7], 30] $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ a [10, 20, [5, 6]] b [10, 20, [5, 6]] 深拷貝...... a [10, 20, [5, 6]] b [10, 20, [5, 6, 7], 30]

在這裡插入圖片描述

二、傳遞不可變物件包含的子物件是可變的情況

程式碼演示:

# 傳遞不可變物件時。不可變物件裡面包含的子物件是可變的。
# 則方法內修改了這個可變物件,源物件也發生了改變。

a = (10,20,[5,6])
print('a', id(a))

def test(m):
    print('m',id(m))
    m[2][0] = 4
    print(m)
    print('m',id(m))

test(a)
print(a)
--------------------------------
a 2437333599360
m 2437333599360
(10, 20, [4, 6])
m 2437333599360
(10, 20, [4, 6])

總結

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

前生篇:引數的傳遞_傳遞可變物件_傳遞不可變物件


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

在這裡插入圖片描述