python中的深拷貝與淺拷貝

2021-10-01 09:10:14 字數 2631 閱讀 6488

在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...