我是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,float和tuple.
现在考虑以下代码:
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)
当您执行时b = a,它会b引用相同的值a。然后当你执行时a = 2,它会a引用一个新值。 b不受影响。
Python中的赋值规则:
赋值只是使名称引用值。
对名称的赋值永远不会影响引用旧值的其他名称。
数据永远不会被隐式复制。