python參數傳遞是值傳遞還是引用傳遞

先舉個栗子:

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

原文鏈接: 點擊打開鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章