在Python中x = y是什么意思?
这个问题是因为我在学习实际参数和形式参数时遇到的一个例子而引发的。假设x和y是两个不能被重复使用的变量。
def fun(y):
x=y
x=3
y=5
fun(y)
print y
#yields 5 and hence I have been led to believe that 2 separate copies of x and y exist wherein if a change is made to x ,nothing is reflected in y.
但是如果y是一个列表,并且在函数中改变了某个值,那么这个变化也会在函数外部体现出来。
def func(a):
x = a
x[0]="abhi"
a = ["ari", "gold", "silver"]
func(a)
print a
# yields ["abhi", "gold", "silver"]
为什么在定义x=y的时候,列表和普通变量会有这样的不同呢?
2 个回答
0
你正在用新数据重新给 x
赋值。
x=y
不是一个需要保持的公式,它只是简单地把 x
的值替换成 y
的值。
我能想到的唯一与你描述的情况类似的例子是这个。
class test:
a = "entity"
>>> t1 = test()
>>> t1.a
'entity'
>>> test.a = "no_name"
>>> t1.a
'no_name'
在这个例子中,当你从 test
创建 t1
时,t1.a
是在“跟随”基类的值,所以当我改变 test.a
的值时,t1.a
仍然会指向 test.a
的位置。
不过,一旦你给 t1
的 a
赋了一个新值,这种情况就会被阻止。因为这时它就会跟随自己的数据了。
>>> t1.a = "yes name"
>>> test.a
'no_name'
>>> t1.a
'yes name'
>>>
4
这一行:
x=y
… 其实就是一个赋值操作,它的意思是:把 y
的值存储到一个叫 x
的新变量里。这是一个多余的赋值,因为在下一行你又把 x
的值重新赋成了一个新值。
你觉得为什么它应该改变 y
的值呢?赋值操作是把等号右边的值存到等号左边的变量里,所以很明显,在第一次赋值之后我们并没有修改 y
。