python中的深拷貝和淺拷貝

2022-11-24 18:57:06 字數 1974 閱讀 8503

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

一般有三種方法,

alist=[1,2,3,["a","b"]]

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

(2)copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變

>>> import copy

>>> c=copy.copy(alist)

>>> print alist;print c

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]

(3)深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝里任何子元素的改變

>>> import copy

>>> d=copy.deepcopy(alist)

>>> print alist;print d

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]始終沒有改變

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

一般有三種方法,

alist=[1,2,3,["a","b"]]

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

(2)copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變

>>> import copy

>>> c=copy.copy(alist)

>>> print alist;print c

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]

(3)深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝里任何子元素的改變

>>> import copy

>>> d=copy.deepcopy(alist)

>>> print alist;print d

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]始終沒有改變

python中的深copy和淺copy

bytes python bytes str bytes 在python3中作為一種單獨的資料型別,不能拼接,不能拼接,不能拼接 20 encode utf 8 b xe2 x82 xac20 b xe2 x82 xac20 decode utf 8 20 解碼 b xa420 decode win...

python中的淺拷貝和深拷貝

淺copy僅僅是對物件的引用,可以理解為是軟連線。而深copy是新記憶體的開闢,他會重新建立記憶體塊存放資料。簡單例子說明 name info import copy name info2 copy.copy name info name info hobby 0 music print name ...

Python 中的深拷貝和淺拷貝

裡面的資料不拷貝出來,其中的資料與原物件裡面資料用的是相同的地址空間 裡面的資料拷貝出來。深拷貝有自己的儲存空間,有自己定義的資料,跟原物件一點關係也沒有。連根拔起 舉個例子 淺拷貝就是拷貝電影名,深拷貝就是拷貝電影名指向的資料 即可以看的電影 注意 對不可變型別的拷貝 1 如果其中全部是不可變型別...