先舉個栗子:
def func(val):
val.append(100)
val = ['x', 'y', 'z']
return val
L = [1, 10]
print func(L)
print L
輸出結果: ['x', 'y', 'z'][1, 10, 100]
爲什麼呢?我們接下來講下Python函數的參數傳遞
我們首先明確一些概念:Python中的變量和對象。
Python中的變量是沒有類型的,我們可以把它看做一個(*void)類型的指針,變量是可以指向任何對象的,而對象纔是有類型的。
而且Python中的對象有不可變對象(number,string,tuple等)和可變對象之分(list,dict等)。
比如下面的例子:
nums = (1, 2, 3)
type(nums) #輸出:tuple
id(nums) #輸出:59179256
nums = [1, 2, 3]
type(nums) #輸出:list
id(nums) #輸出:59094960
可以看到nums是沒有類型的,它可以指向一個tuple也可以指向一個list,從id就可以看出nums指向了不同的對象。 明白了這個概念,那麼我們可以說Python中函數參數的傳遞是傳遞的變量的值。
而且我們有下面的規律:
1. 不可變對象作爲函數參數,相當於C系語言的值傳遞。
2. 可變對象作爲函數參數,相當於C系語言的引用傳遞。
原文鏈接: 點擊打開鏈接