将变量和列表传递给Python中的函数

时间:2013-05-18 08:20:19

标签: python parameter-passing pass-by-reference pass-by-value

我不明白这种行为:

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]

为什么列表已更改,但变量没有? 如何在功能中更改变量? 许多人说通过参考,通过对象引用来传递值,所以我有点困惑,不知道它是如何真的。

2 个答案:

答案 0 :(得分:4)

在python中,整数是不可变的。 v += 1仅将新的整数值绑定到名称v,该名称在函数中是本地的。它不会修改整数。

python中的列表是可变的。您传递一个列表(通过引用,一如既往地在python中),并且该函数将其更改为适当的位置。这就是为什么变化在功能外部被“看到”的原因。

在python中没有“通过值传递”这样的东西。

您可能想要做的是从函数返回v+1,而不是修改绑定到名称v的值。

答案 1 :(得分:1)

因为,列表是可变的,但整数是不可变的。

在此处详细了解:http://docs.python.org/2/reference/datamodel.html#objects-values-and-types