python深淺拷貝簡介

2022-06-22 08:27:14 字數 1269 閱讀 2529

我們這裡要運用乙個模組 copy

copy.copy 是淺拷貝

copy.deepcopy 是深拷貝

他們在拷貝不可變型別的時候作用都是相同的(拷貝到的是記憶體位址)

下面寫的都是在拷貝可變型別的情況,這裡我用的是列表型別

淺拷貝:

這個是把目標內部的指向記憶體位址拷過去

import

copy

d1 = [1, 2]

d3 = copy.copy(d1) #

這句話是進行淺拷貝

print(d1, id(d1)) #

檢視d1的值和它的記憶體位址

print(d3, id(d3)) #

檢視d3的值和它的記憶體位址

>>>[1, 2] 2644535077896[1, 2] 2644535254408

淺拷貝淺拷貝也會出現乙個問題,就是拷貝的可變型別(如列表), 是會隨著對被拷貝的操作改變而改變的

import

copy

d1 = [1, 2, [3, 4]]

d3 =copy.copy(d1)

d1[2][0] = 4 #

這裡是在修改原來的

print(d1, id(d1[-1])) #

這個是原來的

print(d3, id(d3[-1])) #

這個是拷貝的

>>>[1, 2, [4, 4, [5, 6]]] 1645661545096[1, 2, [4, 4, [5, 6]]] 1645661545096

淺拷貝的問題1

如果要解決這個問題的話就得用到深拷貝了

深拷貝:

深拷貝就會把可變型別的東西都拿出來,和原來的隔開

import

copy

d1 = [1, 2, [3, 4]]

d4 = copy.deepcopy(d1) #

使用深拷貝

print(d1, id(d1[-1]))

print(d4, id(d4[-1]))

>>>[1, 2, [4, 4]] 1996035809928[1, 2, [3, 4]] 1996055747208

深拷貝如果可變型別中又有乙個可變型別,那麼他會迭代操作

python 深淺拷貝案例 python 深淺拷貝

深淺拷貝 對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址 import copy a1 22255 a2 22255 print id a1 id a2 3428240 3428240 對於字典 元祖 列表 而言,進行賦值 淺拷貝和深拷貝時,其記憶體位址的變化...

python 深淺拷貝

建立乙個寬度為3,高度為4的陣列 mylist 0 3 4 0,0,0 0,0,0 0,0,0 0,0,0 但是當操作mylist 0 1 1時,發現整個第二列都被賦值,變成 0,1,0 0,1,0 0,1,0 0,1,0 list n n shallow copies of list concat...

python深淺拷貝

python 深淺拷貝 shallow copy 和 deep copy 對於乙個列表,列表裡面可以再放入乙個列表 1 若想複製這乙個列表,使用列表的普通的copy 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....