原文出處: 致敬
方便查詢,作此記錄!
在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用
一般有三種方法,
alist=[1,2,3,[「a」,「b」]]
(1)直接賦值,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變
b=alistprint b
[1, 2, 3, [『a』, 『b』]]
(2)copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變
import copy
c=copy.copy(alist)print alist;print c
[1, 2, 3, [『a』, 『b』]]
[1, 2, 3, [『a』, 『b』]]
alist[3][『a』, 『b』]
(3)深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝裡任何子元素的改變
import copy
d=copy.deepcopy(alist)print alist;print d
[1, 2, 3, [『a』, 『b』]]
[1, 2, 3, [『a』, 『b』]]始終沒有改變
alist[3][『a』, 『b』]
之前見過一道面試題目,還挺有意思,輸出測試返回true 還是false
考察點:1,不可變原組 和 可變列表的深拷貝,淺拷貝區別
轉 Python深複製淺複製or深拷貝淺拷貝
copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很容易理解 a是乙個...
Python深複製淺複製or深拷貝淺拷貝
簡單點說 1.copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。2.copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很...
前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝
面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...