Python裡面如何拷貝乙個物件?(賦值,淺拷貝,深拷貝的區別)

時間 2021-06-02 22:37:16

1樓:歲歲

python中淺拷貝和深拷貝的區別如下:

1. copy.copy 淺拷貝只拷貝父物件,不會拷貝物件的內部的子物件。

2. copy.deepcopy 深拷貝拷貝物件及其子物件

如果拷貝物件是乙個一維列表,那麼淺拷貝和深拷貝沒什麼不同,都是重新申請乙個新的記憶體位址。

import copy

list1 = [1,2,3,4]

print(id(list1))

list2 = list1.copy()

print(list2)

print(id(list2))

print(list1 is list2)

list3 = copy.deepcopy(list1)

print(list3)

print(id(list3))

print(list1 is list3)

96011592

[1, 2, 3, 4]

95979528

False

[1, 2, 3, 4]

31271112

False

因此,list1的改變不會影響到list2與list3。但是對於複雜一些的列表,例如巢狀列表、字典巢狀列表。淺拷貝與深拷貝兩者便展示出完全不同的結果。

import copy

list1 = [1,2,3,4,[5,6]]

print('list1的id:',id(list1))

print('list1第4個元素的id:',id(list1[4]))

#淺拷貝

list2 = list1.copy()

print(list2)

print('list2的id:',id(list2))

print('list2第4個元素的id:',id(list2[4]))

#深拷貝

list3 = copy.deepcopy(list1)

print(list3)

print('list3的id:',id(list3))

print('list3第4個元素的id:',id(list3[4]))

#改變list1中的元素

list1[2] = 7

list1[4][1] = 8

print('list1:',list1)

print('list2:',list2)

print('list3:',list3)

#執行結果

list1的id: 95979528

list1第4個元素的id: 96011592

[1, 2, 3, 4, [5, 6]]

list2的id: 40773832

list2第4個元素的id: 96011592 #子物件的id值一樣,表示淺拷貝沒有拷貝物件,只是使用了列表的引用

[1, 2, 3, 4, [5, 6]]

list3的id: 96023432

list3第4個元素的id: 40773704

list1: [1, 2, 7, 4, [5, 8]]

list2: [1, 2, 3, 4, [5, 8]] #父物件不變,子物件變

list3: [1, 2, 3, 4, [5, 6]] #父子物件都不改變

以上可以說明淺拷貝與深拷貝的區別。

2樓:

淺拷貝和深拷貝的不同僅僅是對組合物件來說,所謂的組合物件就是包含了其它物件的物件,如列表,類例項。而對於數字、字串以及其它「原子」型別,沒有拷貝一說,產生的都是原物件的引用。

3樓:黃哥

看文件吧

8.10. copy — Shallow and deep copy operations

8.10. copy - Shallow and deep copy operations - Python 3.6.2 documentation

自己看明白了,才能成為自己的知識。

Python裡面如何生成隨機數?

Yorlereiyo 9.6.random Generate pseudo random numbers Python 2.7.14rc1 documentation random random Random float x,0.0 x 1.00.37444887175646646 random u...

如果你在乙個喪屍包圍的大廈裡面如何生存更久?

Bunny 往遠處扔東西製造聲音慢慢引開殭屍等差不多了再一層層往下清理殭屍順便搜刮物資 害怕的朋友們建議吃好喝好睡好開窗往下蹦 若能堅持到一樓觀察附近情況必要時可以試試行屍走肉的掛滿內臟的雨衣掩蓋氣味逃離大廈再利用隨手撿到的易拉罐扔向遠處製造聲音引殭屍 我看 行屍走肉 的時候,一直抱有的疑問就是,既...

在乙個相對不成熟的團隊裡面如何提高每位員工的積極性?

hwasion 主線手法 讓他們看到事情有進展。比如各種問題能很快解決。比如,哪怕只是單純地忙起來,也能給他們希望。支線手法 人文關懷. 李雲龍 這個確實是個棘手的問題,目前我們的團隊也處於這個狀態,現在基本上都是用目標,就是個人規劃,公司的發展引導個人的發展,來激勵大家。但是這個終歸是看不見摸不著...