在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用
一般有三種方法,
alist=[1,2,3,["a","b"]]
傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變
>>> b=alist
>>>
print b
[1, 2, 3, ['a', 'b']]
>>>
print alist;print b
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b'], 5]
沒有拷貝子物件,所以原始資料改變,子物件會改變
>>>
import copy
>>> c=copy.copy(alist)
>>>
print alist;print c
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
>>>
print alist;print c
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]
>>> alist[3]
['a', 'b']
>>>
print alist;print c
[1, 2, 3, ['a', 'b', 'cccc'], 5]
[1, 2, 3, ['a', 'b', 'cccc']] //裡面的子物件被改變了
包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝裡任何子元素的改變
>>>
import copy
>>> d=copy.deepcopy(alist)
>>>
print alist;print d
[1, 2, 3, ['a', 'b']]//始終沒有改變
>>>
print alist;print d
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]//始終沒有改變
>>> alist[3]
['a', 'b']
>>>
print alist;print d
[1, 2, 3, ['a', 'b', 'ccccc'], 5]
[1, 2, 3, ['a', 'b']] //始終沒有改變
轉 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,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...