python的複製,深拷貝和淺拷貝的區別

2021-08-20 20:10:30 字數 1334 閱讀 5076

在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,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...