看兩個例子:
python
a = 1 def fun(a): a = 2 fun(a) print a # 1
a = 1
def fun(a):
a = 2
fun(a)
print a # 1
python
a =
def fun(a):
fun(a)
print a # [1]
所有的變數都可以理解是記憶體中乙個物件的「引用」,或者,也可以看似c中void*的感覺。
這裡記住的是型別是屬於物件的,而不是變數。而物件有兩種,「可更改」(mutable)與「不可更改」(immutable)物件。在python中,strings, tuples, 和numbers是不可更改的物件,而list,dict等則是可以修改的物件。(這就是這個問題的重點)
當乙個引用傳遞給函式的時候,函式自動複製乙份引用,這個函式裡的引用和外邊的引用沒有半毛關係了.所以第乙個例子裡函式把引用指向了乙個不可變物件,當函式返回的時候,外面的引用沒半毛感覺.而第二個例子就不一樣了,函式內的引用指向的是可變物件,對它的操作就和定位了指標位址一樣,在記憶體裡進行修改.
Python的函式引數傳遞
原址 我想,這個標題或許是很多初學者的問題。尤其是像我這樣的對c c 比較熟悉,剛剛進入python殿堂的朋友們 c c 的函式引數的傳遞方式根深蒂固的影響這我們的思維 引用?傳值?究竟是那種呢。呵呵,語言的特性決定了是使用的方法,那麼,現在我們來 一下python的函式引數傳遞方式。在開始之前,我...
Python的函式引數傳遞
看兩個例子 a 1 deffun a a 2 fun a print a 1a deffun a fun a print a 1 所有的變數都可以理解是記憶體中乙個物件的 引用 或者,也可以看似c中void 的感覺。a 1 deffun a print func in id a func in 41...
Python函式的引數傳遞
可更改 mutable 與不可更改 immutable 物件 在 python 中,strings,tuples,和 numbers 是不可更改的物件,而 list,dict 等則是可以修改的物件。不可變型別 變數賦值 a 5 後再賦值 a 10,這裡實際是新生成乙個 int 值物件 10,再讓 a...