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

4

我不理解这种行为:

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个回答

4
在Python中,整数是不可变的。 v += 1仅将新的整数值绑定到函数中局部名称为v的变量上,它不会直接修改该整数。
Python中的列表是可变的。你传递一个列表(总是通过引用方式),并且此函数在原地更改它。这就是为什么外部可以“看到”更改结果的原因。
在Python中,不存在“按值传递”的概念。
你可能想要做的是从函数返回v+1,而不是修改名称v绑定的值。

他说Python总是通过值传递变量。 - Bartłomiej Szałach
3
正如那个答案下的评论所指出的那样,该答案中使用的术语令人困惑。如果你习惯于 C++ 的“按值传递参数”,这会导致参数的被复制并传递,则我的论点成立:在Python中,现在不存在(这种)按值传递参数的情况。 - shx2

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接