python中淺拷貝和深拷貝的區別

2021-08-21 10:01:03 字數 1157 閱讀 4728

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可以開闢大空間同時開闢大空間中的小空間放子列表,實現乙個列表中的子列表元素值變化,而另乙個列表不變

python中的淺拷貝和深拷貝

不得不說 python核心程式設計 是一本好書,看到其中一節做一下隨筆。在python中,當建立乙個物件後,然後把它賦給另乙個物件時,python並沒有去拷貝這個物件,而是拷貝了這個物件的引用。看不懂沒關係,我們看乙個例子。raw list first second 12 32 copy list ...

python中的深拷貝和淺拷貝

淺拷貝 copy 不拷貝物件的內容,僅僅拷貝子物件的引用 深拷貝 deepcopy 會連同拷貝子物件的記憶體,對子物件的修改不會影響源物件 下面用 來測試 import copy deftest copy 淺拷貝測試 a 10 20,5,6 b copy.copy a print a a,end t...

python中的淺拷貝和深拷貝

本篇介紹下python中的深拷貝和淺拷貝,主要從基本型別 類 不可變型別等方面進行介紹。1.介紹拷貝之前首先應該明白is和 的區別,即is表示同乙個物件,比較的是值 a 1000 b 1000 a b true a is bfalse class person object def init sel...