1. 程式人生 > >Python中值傳遞和引用傳遞區別

Python中值傳遞和引用傳遞區別

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}