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已經被反轉。