淺拷貝
l1 = [1, '原理: 手繪!a', [4, 5, 6]]
print(l1) #
[1, 'a', [4, 5, 6]]
print(id(l1)) #
163373256
print(id(l1[0])) #
1622830560
l2 = l1.copy() #
[1, 'a', [4, 5, 6]]
l2[2][0] = 4444
print(l2) #
[1, 'a', [4444, 5, 6]]
print(id(l2)) #
163375624
print(id(l2[0])) #
1622830560
print("
l1:", l1) #
l1: [1, 'a', [4444, 5, 6]]
print("
id_l1:
", id(l1)) #
id_l1: 163373256
因為淺拷貝,只是建立了新的記憶體位址,簡單拷貝了原列表第一層所有元素指向的位址。 所以兩個列表內元素指向的是都是相同id。
其中第三個元素[4, 5, 6]是可變型別,指向乙個4,5,6三個元素集合的位址。若其中元素變化,不影響第三個元素[4, 5, 6]的id。l1和l2第三個元素依然指向相同的id。
所以當l1中列表元素發生變化,l2中列表同樣發生變化
深拷貝
importcopy
l1 = [1, '
a', [4, 5, 6]]
print(l1) #
[1, 'a', [4, 5, 6]]
print('
id(l1[0]):
',id(l1[0])) #
1622830560
print('
id(l1[2]):
',id(l1[2])) #
162961416
print(id(l1)) #
163373256
#print(id(l1[0]))
l2 = copy.deepcopy(l1) #
[1, 'a', [4, 5, 6]]
print('
id(l2[0]):
',id(l2[0])) #
1622830560 不可變型別ip位址相同
print('
id(l2[2]):
',id(l2[2])) #
163375432 可變型別ip位址發生變化
原理:經過測試,l1和l2的ip位址是相同的。但是其中不可變的列表元素ip位址是不同的。
深拷貝是把可變元素完全複製,而不可變元素指向位址保持一致。節約了空間,妙啊!
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 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....