Python中值傳遞和引用傳遞區別
阿新 • • 發佈:2018-12-26
python中對一個函式可以傳遞引數,但是如何分辨是值傳遞還是引用傳遞,不是程式設計師手動控制的,而是python根據你傳入的資料物件,自動識別的。
如果你傳入的引數物件是可變物件:列表,字典,這個時候就是引用傳遞,如果引數在函式體內被修改,那麼源物件也會被修改。
如果你傳入的引數物件是不可變的物件:數字,元組,字串,這個時候就是值傳遞。那麼源物件是不會改變的,
例子一:
import sys a=2 b=[1,2,3] def change(x,y): x=3 y[0]=4 change(a,b) print a,b輸出結果: 2 [4, 2, 3];可以看出數字作為一個不可變物件,a的值沒有變化,而b作為列表物件,是可變物件,所以b被改變了
例子二:
import sys a="11111" b={"a":1,"b":2,"c":3} def change(x,y): x="222" y["a"]=4 change(a,b) print a,b輸出結果:11111 {'a': 4, 'c': 3, 'b': 2},a作為字串是不可變物件,所以沒變化,b作為字典,是可變物件,所以被改變了
例子三:
import sys a=(1,2,3) b={"a":1,"b":2,"c":3} def change(x,y): x="222" y["a"]=4 change(a,b) print a,b輸出的結果:(1, 2, 3) {'a': 4, 'c': 3, 'b': 2}