Python参数是通过引用传递的吗?

时间:2015-06-23 00:41:34

标签: python

详细地说,我的问题是: 鉴于以下代码,

x = 10
def func(x):
    x = x+1

def main():
    print(x)
    func(x)
    print(x)

if __name__ == '__main__':
    main()

在运行时我得到:

10
10

这是否意味着Python不通过引用传递值?

我确实检查了另一个类别的问题,并且大多数(如果不是全部)列出了列表或其他类似示例的类比。 是否有可能用简单的术语解释这个问题,比如一个简单的整数?

聚苯乙烯。我是编码的初学者。

由于

1 个答案:

答案 0 :(得分:3)

如果您来自C或C ++这样的背景,我会这样做,这可能会令人抓狂,直到您弄明白为止。

Python具有名称,而不是变量,名称绑定到对象。实际上,您可以将所有“变量”或名称视为指向python对象的指针。

在python中,整数,浮点数和字符串是不可变的。因此,当您执行以下操作时:

x = 10
x = x + 1

您首先将名称x绑定到整数10,然后在评估x + 1时获得新对象11,然后绑定x到那个对象。函数体内的x是函数的本地函数,当您将其绑定到11时,全局x仍然绑定到10

如果您要将list传递给该函数,并将某些内容附加到列表中,则该列表将被修改。 python中的list是一个可变对象。绑定到列表的所有名称都将引用修改后的列表。

因此,当你传递可变对象时,它看起来好像是通过引用传递,当你传递不可变对象时,你可能看起来像是在传递值。

相关问题