python函數的參數傳遞是傳值還是傳引用?


來看一個例子:

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系語言的引用傳遞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM