python 深淺拷貝

2022-02-16 23:21:21 字數 3496 閱讀 7903

#對於 數字 和 字串 而言,賦值、淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址

import copy

a1 = 22255

a2 = 22255

print(id(a1),id(a2)) #3428240 3428240

#對於字典、元祖、列表 而言,進行賦值、淺拷貝和深拷貝時,其記憶體位址的變化是不同的。

import copy

#字典n1 =

##賦值

n2 = n1

print(n1,n2) #

print(id(n1),id(n2)) #6674440 6674440 #記憶體位址一樣

##淺拷貝

n3 = copy.copy(n1)

print(n1,n3) #

print(id(n1),id(n3)) #6936584 12067848 #淺拷貝第一級,記憶體位址相同

print(id(n1['k3']),id(n3['k3'])) #18741768 18741768

##深拷貝

n4 = copy.deepcopy(n1)

print(n1,n4) #

print(id(n1),id(n4)) #6805512 11736904

print(id(n1['k3']),id(n4['k3'])) #7601032 7599496 #深拷貝第二級,記憶體位址也不相同

#列表n1 = [1,2,3,4,5,[6,7],]

##賦值

n2 = n1

print(n1,n2) #[1, 2, 3, 4, 5, [6, 7]] [1, 2, 3, 4, 5, [6, 7]]

print(id(n1),id(n2)) #18609928 18609928

print(id(n1[5]),id(n2[5])) #18609544 18609544

##淺拷貝

n3 = copy.copy(n1)

print(n1,n3) #[1, 2, 3, 4, 5, [6, 7]] [1, 2, 3, 4, 5, [6, 7]]

print(id(n1),id(n3)) #18609928 18232904

print(id(n1[5]),id(n3[5])) #18609544 18609544

##深拷貝

n4 = copy.deepcopy(n1)

print(n1,n4) #[1, 2, 3, 4, 5, [6, 7]] [1, 2, 3, 4, 5, [6, 7]]

print(id(n1),id(n4)) #18609928 18611848

print(id(n1[5]),id(n4[5])) #18609544 18611912

#元組乙個小插曲:

import copy

n1 = (1,2,3,4,5,(6,7,),)

#賦值n2 = n1

print('n1:',n1,'n2:',n2) #n1: (1, 2, 3, 4, 5, (6, 7)) n2: (1, 2, 3, 4, 5, (6, 7))

print(id(n1),id(n2)) #10416584 10416584

print(id(n1[5]),id(n2[5])) #18415304 18415304

print(type(n1),type(2)) ##淺拷貝

n3 = copy.copy(n1)

print('n1:',n1,'n3:',n3) #n1: (1, 2, 3, 4, 5, (6, 7)) n2: (1, 2, 3, 4, 5, (6, 7))

print(id(n1),id(n3)) #10416584 10416584

print(id(n1[5]),id(n3[5])) #18415304 18415304

print(type(n1),type(3)) ##深拷貝

n4 = copy.deepcopy(n1)

print('n1:',n1,'n4:',n4) #n1: (1, 2, 3, 4, 5, (6, 7)) n2: (1, 2, 3, 4, 5, (6, 7))

print(id(n1),id(n4)) #10416584 10416584

print(id(n1[5]),id(n4[5])) #18415304 18415304

print(type(n1),type(5)) #

再乙個小插曲:

import copy

n1 = (1,2,3,4,5,[6,7,],)

#賦值n2 = n1

print('n1:',n1,'n2:',n2) #(1, 2, 3, 4, 5, [6, 7]) n2: (1, 2, 3, 4, 5, [6, 7])

print(id(n1),id(n2)) #11465160 11465160

print(id(n1[5]),id(n2[5])) #18480456 18480456

print(type(n1),type(2)) ##淺拷貝

n3 = copy.copy(n1)

print('n1:',n1,'n3:',n3) #n1: (1, 2, 3, 4, 5, [6, 7]) n3: (1, 2, 3, 4, 5, [6, 7])

print(id(n1),id(n3)) #11465160 11465160

print(id(n1[5]),id(n3[5])) #18480456 18480456

print(type(n1),type(3)) ##深拷貝

n4 = copy.deepcopy(n1)

print('n1:',n1,'n4:',n4) #n1: (1, 2, 3, 4, 5, [6, 7]) n4: (1, 2, 3, 4, 5, [6, 7])

print(id(n1),id(n4)) #11465160 18109736

print(id(n1[5]),id(n4[5])) #18480456 18478920

print(type(n1),type(5)) #

出現以上問題有可能跟下面的說法有關:

案例**

import copy

dic =

print("old:",dic)

new_dic1 = copy.copy(dic)

new_dic1["cpu"][0] = 50

print("old:",dic)

print("淺拷貝:",new_dic1)

#返回結果:

#old:

#淺拷貝:

new_dic2 = copy.deepcopy(dic)

new_dic2["cpu"][0] = 60

print("old:",dic)

print("深拷貝:",new_dic2)

#返回結果

# old:

# 深拷貝:

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 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....