2013-05-18 100 views
4
運作

我不明白這種行爲:傳遞變量和列表在Python

def getvariable(v): 
    v += 1 

def getlist(l): 
    l.append(8) 

myvariable = 1 
mylist = [5, 6, 7] 

print myvariable, mylist 

getvariable(myvariable) 
getlist(mylist) 

print myvariable, mylist 

輸出:

1 [5, 6, 7] 
1 [5, 6, 7, 8] 

爲什麼名單發生變化,但變化沒有? 如何更改函數中的變量? 很多人都說通過引用,通過對象引用傳遞值,所以我有點困惑,不知道它是如何實現的。

回答

4

在python中,整數是不可變的。 v += 1僅將名稱v的新整數值綁定到您的函數的本地。它不會修改適當的整數。

Python中的列表是可變的。你傳遞一個列表(通過引用,如同在Python中一樣),並且函數將其改變。這就是爲什麼變化在功能外部「看到」的原因。

在python中沒有「傳值」的東西。

你可能想要做的是從你的函數中返回v+1,而不是修改綁定到名稱v的值。

+0

http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference他說Python始終傳遞值 –

+3

作爲該答案的評論表明,該答案中使用的術語是混淆。如果你習慣了'C++'的「by-value」arg-passing,這會導致arg的**值**被複制和傳遞,那麼我的觀點就是:現在有這樣的東西(這種類型)在Python中傳遞值。 – shx2