#對於 數字 和 字串 而言,賦值、淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址
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 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....