在python中x=y是什么意思?

在python中x=y是什么意思?,python,python-2.7,Python,Python 2.7,之所以提出这个问题,是因为我在阅读有关实际和形式论点的文章时遇到了一个例子。设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. 但

之所以提出这个问题,是因为我在阅读有关实际和形式论点的文章时遇到了一个例子。设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的定义存在差异?

这一行:

x=y
…只是一个赋值:将y的值存储在一个名为x的新变量中。这是一个多余的赋值,因为在下一行中,您将x的值赋给了一个新值

为什么你认为它会改变y的值?赋值将=右边的值存储在变量左边,因此很明显,在第一次赋值后,我们从未修改过y。

您正在用新数据重新赋值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'
>>> 

阅读。你所说的关于列表的内容根本不是真的。@Daniel请参考我在问题描述中所做的更改,并请告诉我为什么我所说的不是真的。因为在代码中,你根本没有做相同的事情。您正在对列表中的一个元素进行变异,而不是更改名称所指的内容。但这正是我最初打算问的问题。当x=y且y为列表时,如果x和y中存在两个列表副本,则x中的更改不应导致y中的更改。确实如此。为什么同样的方法不适用于正常的不可迭代变量?用y的副本替换x的值。。。或者是对y所持有的东西的引用——不是真的,它只是将x分配给y所分配给的同一个对象,而不管y是可变的还是不可变的。