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]

为什么列表改变了,但变量没有?如何更改函数中的变量?很多人说传值、传引用、传对象,所以我有点糊涂,不知道到底是怎么回事。

4

2 回答 2

4

在 python 中,整数是不可变的。v += 1只将一个新的整数值绑定到 name v,它在你的函数中是本地的。它不会修改适当的整数。

python中的列表是可变的。您传递一个列表(通过引用,就像在 python 中一样),该函数将其更改到位。这就是为什么在函数外部“看到”变化的原因。

python中没有“按值传递”之类的东西。

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

于 2013-05-18T08:23:37.543 回答
1

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

在此处阅读更多信息:http: //docs.python.org/2/reference/datamodel.html#objects-values-and-types

于 2013-05-18T08:24:55.047 回答