python中淺拷貝與深拷貝

2022-07-11 08:15:12 字數 2148 閱讀 9880

淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。(單從乙個淺字就可以看出他拷貝的東西不深,可以理解為只拷貝一層)

import

copy

a = [1,"

ss",[2,3],]

b =copy.copy(a)

print

(b)print

(id(a))

print(id(b))

現在有乙個列表a裡面有數字,字串,列表和字典 用淺拷貝的方法給到b 現在列印下b的內容 和a,b的記憶體位址

可以看到 內容一樣但是記憶體位址不一樣 換另外一種比較方式看看

import

copy

a = [1,"

ss",[2,3],,(2,3)]

b =copy.copy(a)

print(id(a[1]))

print(id(b[1]))

print(id(a[2]))

print(id(b[2]))

比較列表下任何乙個子元素 他們的記憶體位址都是一樣的

可以看到記憶體位址都是一樣的

import

copy

a = [1,"

ss",[2,3],,(2,3)]

b =copy.copy(a)

print

(a)print(b)

現在向列表中新增乙個資料看看b發生改變沒

可以看到b沒有發生改變

import

copy

a = [1,"

ss",[2,3],,(2,3)]

b =copy.copy(a)

a[1]="

haha

"print

(a)print(b)

現在改變不可變型別字串的值,在向可變資料型別列表加入乙個新值 列印一哈

可以看到可變資料型別更改了之後 b隨著a 的改變而改變了  給不可變資料型別賦值後 b 還是指向了ss這個值

唯一要注意的是如果是元組的拷貝的話 記憶體位址是一樣的

深拷貝,包含物件裡面的自物件的拷貝(可以理解為轉殖,全拷貝過去但是兩者沒有任何關係了,各玩各的),所以原始物件的改變不會造成深拷貝裡任何子元素的改變

import

copy

a=[1,2,[3,4],5]

b=copy.deepcopy(a)

print

(b)#

結果為 [1,2,[3,4],5]

#接下來我們更改a的資料

print

(a)print

(b)#

結果為 [1,2,[3,4],5,6]和[1,2,[3,4],5]

#可以發現淺層的資料更改(第一層)並沒有讓b發生變化

#接下來進行子物件資料(深層資料)的更改

print

(a)print

(b)#

結果為 [1,2,[3,4,7],5,6]和[1,2,[3,4],5]

python 中的拷貝 淺拷貝與深拷貝

0.序列指什麼?序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串 string 元組 tuple 列表 list the difference between tuple and list tuple would not be changed,but list ...

Python 淺拷貝與深拷貝

淺拷貝 構造方法或切片 做的是淺拷貝 即拷貝了最外層容器,副本中的元素是原容器中元素的引用 在 python 中,通過乙個物件向另外乙個物件賦值,實際僅僅是賦值了物件的引用,而非建立乙個物件並賦值。那如何真正拷貝物件呢?我們看一下兩種不同的拷貝方式。先從乙個示例看起 anndy anndy age ...

Python 淺拷貝與深拷貝

以下例項是使用 copy 模組的 copy.copy 淺拷貝 和 copy.deepcopy usr bin python coding utf 8 import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物件的引用 c copy.copy a 物件拷貝,淺拷貝 d copy....