深淺Copy的理解

2022-07-25 07:12:07 字數 1613 閱讀 2963

在python裡對物件進行拷貝有三個,即賦值,深拷貝,淺拷貝。

而物件又分為兩種,一種是不可變物件(字串、元組、數字 ),一種是可變物件(列表、字典)。

而深淺拷貝有三種情況:拷貝的是不可變物件、拷貝的是可變物件、拷貝的可變物件裡面還有子物件

import

copy

list0 = '

hello,world

'list1 =copy.copy(list0)

list2 =copy.deepcopy(list0)

list3 =list0

print

(list0, id(list0))

print

(list1, id(list1))

print

(list2, id(list2))

print(list3, id(list3))

對list0()進行修改:list0 = list0 + 'good evening'

發現即使修改了list0,其他的值也不會變,位址也沒有改變。

結論:對於不可變物件來說,深淺拷貝都一樣的,即便是用深拷貝,也都是一樣的id,如果要重新賦值,也只是建立乙個新的物件,替換舊的物件。所以對於不可變物件來說,不管怎麼拷貝,它的位址、值都是一樣的。

import

copy

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

list1 =copy.copy(list0)

list2 =copy.deepcopy(list0)

list3 =list0

print

(list0, id(list0))

print

(list1, id(list1))

print

(list2, id(list2))

print(list3, id(list3))

對於可變物件來說:

賦值(我們暫且稱它為』=淺拷貝』)的新物件與原物件相比,值相等,位址也相等;

淺拷貝:與原物件相比,值相等,位址不相等;

深拷貝:與原物件相比,值相等,位址不相等。

import

copy

list0 = [1,2,3,4,5,6, ['

a', 'b'

]]list1 =copy.copy(list0)

list2 =copy.deepcopy(list0)

list3 =list0c'

)print

(list0, id(list0))

print

(list1, id(list1))

print

(list2, id(list2))

print(list3, id(list3))

結論:淺拷貝沒有拷貝子物件,所以原物件發生改變,其子物件也發生了改變,而深拷貝拷貝了子物件,原物件發生改變,其本身也不會改變。

集合 深淺copy

集合 特點 集合是可變的資料型別,但他裡面的元素必須是不可變的資料型別,無序,不可重複。建立 set1 set 或者直接建立set2 集合的增刪查 增 add set1.add 女生 update set1.update abc 迭代,類似於列表的extend 刪 pop set1.pop 隨機刪除...

Python中的深淺copy

在python中的深淺copy和其他語言中的不同,在c語言中,只要位址發生變化的都是深copy,位址不發生變化的都是淺copy。但是在python中卻不一樣,在python中分兩種情況來解釋深淺copy。第一種情況,當列表中不存在其他其他列表元素的時候,這個時候深copy和淺copy是相同的,都是建...

python當中的深淺copy

首先,我們要明確以下概念 在python中,物件按照可變不可變分為可變物件和不可變物件 可變物件 指 可以在原處修改,而不用建立新的物件 包括列表,字典,集合 不可變物件指 不支援在原處修改,只能通過表示式建立新的物件,然後把結果分配給變數 包括 數字,字串,元組 像a 3,這段 的執行過程是這樣 ...