我不明白这种行为:
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]
为什么列表已更改,但变量没有? 如何在功能中更改变量? 许多人说通过参考,通过对象引用来传递值,所以我有点困惑,不知道它是如何真的。
答案 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