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

2021-09-27 07:06:00 字數 1017 閱讀 8693

原文出處: 致敬

方便查詢,作此記錄!

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用

一般有三種方法,

alist=[1,2,3,[「a」,「b」]]

(1)直接賦值,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變

b=alist

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