來看一個例子:
def func(val): val.append(100) val = ['x', 'y', 'z'] return val L = [1, 10] print func(L) print L
應該打印出什么呢?
可能大多數人會任務打印以下內容
['x', 'y', 'z']
['x', 'y', 'z']
錯了,以下打印內容才是正確的:
['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系語言的引用傳遞。