Python入門基礎篇 No.57 —— 淺拷貝和深拷貝_傳遞不可變物件包含的子物件是可變的情況
阿新 • • 發佈:2021-01-12
技術標籤:# 基礎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學習資料!!!