Python的函數傳參

Python的函數傳參不分傳值或是傳引用,它傳入的是對象的id,即對象的內存地址。所以可以修改這個內存地址上的數據,但是無法改變這個內存地址,即無法用新的對象來替換舊的對象(賦值不會修改傳入的參數)。

例子:
假如有一個函數,需要實現將傳入的list列表反轉的功能:

def test(nums):
	nums = nums[::-1] # 使用列表切片,賦值給nums

由於列表切片會產生一個新的對象,擁有一個新的id,所以上面的代碼相當於將一個新的id賦予一箇舊的id,但是這個參數的id是不會改變的,所以推出函數或並不會對nums造成影響。
而如果使用.reverse()函數

def test(nums):
	nums.reverse() # 使用list的reverse函數

由於並沒有改變nums的id,只是對這個地址上保存的對象做了一些修改,這是允許的,退出函數後nums已經被反轉。

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