由于我在阅读有关实际和正式论证时遇到的某个例子,因此提出了这个问题。设x和y为2个不可迭代的变量
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的定义存在差异?
答案 0 :(得分:4)
这一行:
x=y
...只是一项说明:将y
的值存储在名为x
的新变量中。这是一项多余的任务,因为在下一行中,您将x
的值重新指定为新值。
为什么你认为它应该改变了y
的价值?分配存储左侧变量中=
右侧的任何值,所以很明显我们在第一次分配后从未修改过y
。
答案 1 :(得分:0)
您正在为x
重新分配新数据。
x=y
不是要维护的公式,它只是执行将x
的值替换为y的相同值的操作
我能想到的唯一一个案例就是这个例子。
class test:
a = "entity"
>>> t1 = test()
>>> t1.a
'entity'
>>> test.a = "no_name"
>>> t1.a
'no_name'
在这种情况下,当您从t1
创建test
时,t1.a
"" 基类值,所以当我更改test.a
的值,t1.a
仍会指向test.a
位置。
但是,只要您为t1
a
分配新值,就会阻止此操作。这是因为它现在将遵循自己的数据。
>>> t1.a = "yes name"
>>> test.a
'no_name'
>>> t1.a
'yes name'
>>>