python byRef // copy

use*_*138 6 python

我是Python的新手(并且不管怎么说都不太了解),但我记得读过python通常不会复制值,所以任何语句a = b都会使b指向a.如果我跑

a = 1
b = a
a = 2
print(b)
Run Code Online (Sandbox Code Playgroud)

给出结果1.不应该是2吗?

mgi*_*son 11

不,结果应为1.

将赋值运算符(=)视为引用的赋值.

a = 1 #a references the integer object 1
b = a #b and a reference the same object
a = 2 #a now references a new object (2)
print b # prints 1 because you changed what a references, not b
Run Code Online (Sandbox Code Playgroud)

同时,这整个的区别真的是最重要的可变对象,如lists,而不是一成不变的状物体int,floattuple.

现在考虑以下代码:

a=[]  #a references a mutable object
b=a   #b references the same mutable object
b.append(1)  #change b a little bit
print a # [1] -- because a and b still reference the same object 
        #        which was changed via b.
Run Code Online (Sandbox Code Playgroud)


Ned*_*der 5

当您执行时b = a,它会b引用相同的值a。然后当你执行时a = 2,它会a引用一个新值。 b不受影响。

Python中的赋值规则:

  1. 赋值只是使名称引用值。

  2. 对名称的赋值永远不会影响引用旧值的其他名称。

  3. 数据永远不会被隐式复制。