2017-05-25 70 views
-3
def foo(a, b): 
    a = 1 
    b[0] = 2 

p, q = 100, [200, 300] 
foo(p, q) 
print(p, q) 

>>> 100 [2, 300] 

我的问题是,为什么q变化,但P不?谢谢!为什么分配是错误的?

+0

您是否期望'b'被复制?不是,所有的名字都是引用。查看有关如何工作的副本。或者参见[如何克隆或复制列表?](// stackoverflow.com/q/2612802)来创建副本。 –

+0

在提出问题之前,请搜索相似的东西。有太多类似的问题,你可以从他们的答案 –

+0

非常感谢。我尝试过搜索,但使用了错误的关键字。 –

回答

1

q是一个列表,因此是“通过引用传递给函数”。 p是按值传递的。

+0

非常感谢你 –

+0

为了表示感谢,请在找到答案的时候尽快给出答案。 – sophros