详细地说,我的问题是: 鉴于以下代码,
x = 10
def func(x):
x = x+1
def main():
print(x)
func(x)
print(x)
if __name__ == '__main__':
main()
在运行时我得到:
10
10
这是否意味着Python不通过引用传递值?
我确实检查了另一个类别的问题,并且大多数(如果不是全部)列出了列表或其他类似示例的类比。 是否有可能用简单的术语解释这个问题,比如一个简单的整数?
聚苯乙烯。我是编码的初学者。
由于
答案 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
是一个可变对象。绑定到列表的所有名称都将引用修改后的列表。
因此,当你传递可变对象时,它看起来好像是通过引用传递,当你传递不可变对象时,你可能看起来像是在传递值。