關於python切片淺複製和深複製

2021-08-28 03:38:25 字數 1703 閱讀 9830

剛上了第二週python課,這節課是關於python序列之列表的

整理一下自己在學習過程中遇到困惑的地方,自用。

首先python中有乙個符號[:]

這個符號的作用是切片複製,它不同於賦值,只是將陣列的值複製過去,但是其記憶體位址是不同的。

a = [1,2,3];

b =a ;

print(a is b );控制台輸出結果為true

a = [1,3,4];

b = a[:];切片複製陣列的值給b

print(b);

print(a is b);控制台輸出結果false

為什麼會出現這樣的結果,那是因為第二部分,b = a [:]

此時我們在其下面再輸入

print(id(a));

print(id(b));

則會得到兩個不同的位址,這就是為什麼print(a is b)輸出為false的原因。

zhang = [『san』 ,[『age』,20]];

li = zhang[:];

print(li is zhang);控制台輸出false

li[0] = 『si』;

li[1][1] = 30;

print(li) ;控制台輸出['si',['age',30]]

print(zhang);控制台輸出['san',['age',30]]

這時候我們發現,變數zhang的年齡數值被汙染了,也變成了 30。這就是淺複製。

淺複製 只拷貝父物件,不會拷貝物件的內部的子物件。

深複製 拷貝物件及其子物件因

zhang = [『san』 ,[『age』,20]];

li = zhang[:];

li[1] = zhang[1][:];新增的**行

print(li is zhang);

li[0] = 『si』;

li[1][1] = 30;

print(li);控制台輸出['si',['age',30]]

print(zhang);控制台輸出['san',['age',20]]

以上就是第二週我稍有疑惑的地方,還有個通用深複製迴圈我沒有實現出來,qaq等我理解了再補充上來

jaijia師兄給了我乙個模板作為參考,自用//w//方便複習

def

my_deepcopy

(arr):

rt = ;

for item in arr:

if isinstance(item,list):

else:

return rt

if __name__ == '__main__':

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

b = my_deepcopy(a);

b[3][2] = 'test';

print (a);

print (b);

python 深複製和淺複製

l1 1,2,3 4,5 l2 list l1 l1 1,2,3 4,5 99 l2 1,2,3 4,5 l1 1 remove 2 l1 1,3 4,5 99 l2 1,3 4,5 l2 1 11,12 l2 2 10,11 l1 1,3,11,12 4,5 99 l2 1,3,11,12 4,5...

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...

深複製和淺複製

以下 是否完全正確,執行可能得到的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class a class b b void sayhello b b int main 程式正常執行 程式編譯錯誤 程式崩潰 程式死迴圈 這個程式會直接崩潰 voidsayhello ...