python3中淺拷貝與深拷貝的實現方式 區別

2021-08-14 21:46:20 字數 1154 閱讀 7108

python3淺拷貝與深拷貝的實現方式、區別:

list1 = [1,2,3]

list2 = list1

list1[0] = 0

print(list2)

print(list1)

列印的結果:

[0, 2, 3]

[0, 2, 3]

小結:通過把乙個列表變數名賦值給另乙個變數名,只是把乙個列表變數名list1的指引賦值給另乙個變數名list2,使list1和list2都指向[1,2,3],所以當列表中的乙個元素改變了,list1和list2都變了.

list1 = [1,2,3]

list2 = list1.copy()

list1[0] = 0

print(list2)

print(list1)

列印的結果:

[1, 2, 3]

[0, 2, 3]

小結:copy函式是又開闢了乙個記憶體空間,裡面放有1,2,3,使list2指向新開闢的記憶體空間,所以list1的元素變化並不影響list2.

list1 = [[4,5,6],2,3]

list2 = list1.copy()

list1[0][0] = 0

print(list2)

print(list1)

列印結果:

[[0, 5, 6], 2, 3]

[[0, 5, 6], 2, 3]

小結:copy函式有個坑,當列表中巢狀小列表時,用copy函式,外面的大列表開闢了乙個新的記憶體空間,但裡面的子列表只是賦值了指引,都指向[4,5,6],所以當作為子列表的整體改變時,兩個列表互不影響,當作為子列表的元素改變時,兩個列表同改變,那麼在這種情況下,怎麼實現兩個列表互不影響呢?

list1 = [[4,5,6],2,3]

list2 = copy.deepcopy(list1)

list1[0][0] = 0

print(list2)

print(list1)

列印結果:

[[4, 5, 6], 2, 3]

[[0, 5, 6], 2, 3]

小結:當列表中巢狀子列表時,用deepcopy可以開闢大空間同時開闢大空間中的小空間放子列表,實現乙個列表中的子列表元素值變化,而另乙個列表不變

Python3之淺拷貝和深拷貝

python中賦值語句不複製物件,而是在目標和物件之間建立繫結 bindings 關係。python3中有6種標準的資料型別,可分為可變型別和不可變型別。可變型別 list 列表 dictionary 字典 set 集合 不可變型別 number 數字 string 字串 tuple 元組 淺拷貝由...

Python3的深拷貝和淺拷貝

a 1 b a a 2 print a,b print id a id b 執行結果 2 11445293568 1445293536 列表直接復賦值給列表不屬於拷貝,只是記憶體位址的引用 list1 a b c list2 list1 print list1,list2 print id list...

python中淺拷貝與深拷貝

淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。單從乙個淺字就可以看出他拷貝的東西不深,可以理解為只拷貝一層 import copy a 1,ss 2,3 b copy.copy a print b print id a print id b 現在有乙個列表a裡面有數字,字串,列表和字典 用淺拷貝的...