剛上了第二週python課,這節課是關於python序列之列表的
整理一下自己在學習過程中遇到困惑的地方,自用。
首先python中有乙個符號[:]
這個符號的作用是切片複製,它不同於賦值,只是將陣列的值複製過去,但是其記憶體位址是不同的。
a = [1,2,3];為什麼會出現這樣的結果,那是因為第二部分,b = a [:]b =a ;
print(a is b );
控制台輸出結果為true
a = [1,3,4];
b = a[:];
切片複製陣列的值給b
print(b);
print(a is b);
控制台輸出結果false
此時我們在其下面再輸入
print(id(a));則會得到兩個不同的位址,這就是為什麼print(a is b)輸出為false的原因。print(id(b));
zhang = [『san』 ,[『age』,20]];這時候我們發現,變數zhang的年齡數值被汙染了,也變成了 30。這就是淺複製。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 = [『san』 ,[『age』,20]];以上就是第二週我稍有疑惑的地方,還有個通用深複製迴圈我沒有實現出來,qaq等我理解了再補充上來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]]
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 ...