1. 程式人生 > >深拷貝、淺拷貝以及引用傳遞和按值傳遞的區別與聯絡

深拷貝、淺拷貝以及引用傳遞和按值傳遞的區別與聯絡

python的值傳遞不會改變傳入引數的值,而引用傳遞傳入的是一個地址。有點相似c的指標。在執行完畢之後會改變傳入地址所指的值。

值傳遞型別例如以下:

上面的程式碼僅僅是將a的值作為引數傳遞進去。程式執行完之後a的值並未改變

1 2 3 4 5 6 = 1 def change_integer(a): = + 1 return a print change_integer(a) print a

結果:

2

1

[Finished in 0.1s]

引用傳遞的型別例如以下:

1 2 3 4 5 6 7 = [123] def change_list(b): b[0]= b[0]+1 return b print change_list(b) print b

結果:

[2, 2, 3]

[2, 2, 3]

[Finished in 0.1s]

所謂的深拷貝其實就是不破壞原來的資料,也就是為所謂的按值傳遞

所謂的淺拷貝其實就是C語言裡面的引用,新變數和原變數用的相同地址,也就是所謂的引用傳遞

而這裡將b的地址傳遞進去之後,程式執行完之後b的值也隨之改變。

怎樣解決 變數 : 由 引用傳遞 變為 值傳遞??

方案例如以下:

1 2 3 4 5 6 7 8 9 import copy = [123] def change_list(b): b[0]= b[0]+1 return b print change_list(copy.deepcopy(b)) print b

結果:

[2, 2, 3]

[1, 2, 3]