在python裡對物件進行拷貝有三個,即賦值,深拷貝,淺拷貝。
而物件又分為兩種,一種是不可變物件(字串、元組、數字 ),一種是可變物件(列表、字典)。
而深淺拷貝有三種情況:拷貝的是不可變物件、拷貝的是可變物件、拷貝的可變物件裡面還有子物件
importcopy
list0 = '
hello,world
'list1 =copy.copy(list0)
list2 =copy.deepcopy(list0)
list3 =list0
(list0, id(list0))
(list1, id(list1))
(list2, id(list2))
print(list3, id(list3))
對list0()進行修改:list0 = list0 + 'good evening'
發現即使修改了list0,其他的值也不會變,位址也沒有改變。
結論:對於不可變物件來說,深淺拷貝都一樣的,即便是用深拷貝,也都是一樣的id,如果要重新賦值,也只是建立乙個新的物件,替換舊的物件。所以對於不可變物件來說,不管怎麼拷貝,它的位址、值都是一樣的。
importcopy
list0 = [1,2,3,4,5,6]
list1 =copy.copy(list0)
list2 =copy.deepcopy(list0)
list3 =list0
(list0, id(list0))
(list1, id(list1))
(list2, id(list2))
print(list3, id(list3))
對於可變物件來說:
賦值(我們暫且稱它為』=淺拷貝』)的新物件與原物件相比,值相等,位址也相等;
淺拷貝:與原物件相比,值相等,位址不相等;
深拷貝:與原物件相比,值相等,位址不相等。
importcopy
list0 = [1,2,3,4,5,6, ['
a', 'b'
]]list1 =copy.copy(list0)
list2 =copy.deepcopy(list0)
list3 =list0c'
(list0, id(list0))
(list1, id(list1))
(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,這段 的執行過程是這樣 ...