在python中拷貝預設為淺拷貝,因為占用時間和記憶體交少
'''淺拷貝'''
num_list1 =[1
,2,3
,[1,
2,3]
,4,5
,6,7
,8,9
]num_list2 = num_list1.copy(
)print
("before:"
)print
(num_list1)
print
(num_list2)
num_list2[2]
=999
num_list2[3]
[1]=
999print
("after:"
)print
(num_list1)
print
(num_list2)
執行結果
before:[1
,2,3
,[1,
2,3]
,4,5
,6,7
,8,9
][1,
2,3,
[1,2
,3],
4,5,
6,7,
8,9]
after:[1
,2,3
,[1,
999,3]
,4,5
,6,7
,8,9
][1,
2,999,[1
,999,3
],4,
5,6,
7,8,
9]
我們可以看到,雖然我們只對num_list2進行賦值改變,但最後num_list1中的[3][1]值也跟著進行改變
淺拷貝只拷貝父物件,不會拷貝物件的內部的子物件(即仍為相同位址,子物件(陣列)修改,也會修改)
我們檢視一下id
print(id
(num_list1[2]
))print(id
(num_list2[2]
))print(id
(num_list1[3]
))print(id
(num_list2[3]
))
執行結果
140710924558800
2249129308080
2249080328648
2249080328648
可以清晰的看出子物件的id是相同的,故改變num_list2中的賦值是改變id的賦值,num_list1隨之改變
進行深拷貝首先要匯入copy包
'''深拷貝'''
import copy
num_list1 =[1
,2,3
,[1,
2,3]
,4,5
,6,7
,8,9
]num_list2 = copy.deepcopy(num_list1)
print
("before:"
)print
(num_list1)
print
(num_list2)
num_list2[2]
=999
num_list2[3]
[1]=
999print
("after:"
)print
(num_list1)
print
(num_list2)
執行結果
before:[1
,2,3
,[1,
2,3]
,4,5
,6,7
,8,9
][1,
2,3,
[1,2
,3],
4,5,
6,7,
8,9]
after:[1
,2,3
,[1,
2,3]
,4,5
,6,7
,8,9
][1,
2,999,[1
,999,3
],4,
5,6,
7,8,
9]
可以看出改變num_list2後num_list1並沒有改變
深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝裡任何子元素的改變
現在我們再來檢視一下id
print(id
(num_list1[2]
))print(id
(num_list2[2]
))print(id
(num_list1[3]
))print(id
(num_list2[3]
))
執行結果
140710924558800
2519933038512
2519912239560
2519913503560
此時的子物件的id也改變了,所以num-list1不再因為num_list2改變而改變 python 中的拷貝 淺拷貝與深拷貝
0.序列指什麼?序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串 string 元組 tuple 列表 list the difference between tuple and list tuple would not be changed,but list ...
python中淺拷貝與深拷貝
淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。單從乙個淺字就可以看出他拷貝的東西不深,可以理解為只拷貝一層 import copy a 1,ss 2,3 b copy.copy a print b print id a print id b 現在有乙個列表a裡面有數字,字串,列表和字典 用淺拷貝的...
Python中的淺拷貝與深拷貝
1.淺拷貝 情況1的例項如下 import copy a 1,2 b 3,4 c a,b 注意這裡的c就是乙個可變物件!d copy.copy c print 變數c c print print 變數d d 結果 變數c 1,2 3,4 變數d 1,2 3,4 原因分析 需要拷貝的物件c是乙個lis...