python如何在函数中更改输入变量的值,即使它被分配给另一个变量?

时间:2017-01-10 02:59:19

标签: python function python-3.x

我想定义一个函数,其中列表 x是其输入变量,假设我想在执行函数后使输入变量(x)的值保持不变,我认为我应该做的是将输入变量(x)的值赋给另一个变量(y)并对这个新变量(y)进行计算并在结尾处返回y,保持输入变量x不变(这是第二个函数)代码)。

实现该代码会产生相同的结果,就像我没有添加新变量y并在y上执行计算一样。 x的值改变了。 (它给出与第一个函数相同的结果)

我发现通过构造一个空列表y,然后将x的条目逐个添加到y然后在y上执行操作来间接地将x的值分配给y来解决问题(如第三个代码中的函数)。

我的问题是,为什么python会这样做?难道不是这样的情况,当我将x的值赋给y并对y进行计算时,x保持不变?我错过了什么?

def li(X):
   X.append(1)
   return(X)

def le(X):
   Y=X
   Y.append(1)
   return(Y)

def lo(X):
   Y=[]
   for i in range(X):
          Y.append(X[i])
   Y.append(1)
   return(X)

1 个答案:

答案 0 :(得分:2)

  

我错过了什么?

你的问题在于Python变量的工作方式。您会看到,当您将列表x分配给变量y时,您未创建x 副本 。而是在列表x中创建 引用 。这意味着当任一变量发生变化(xy)时,它们都会发生变化,因为它们都指向完全相同的列表。

您需要显式告诉Python为变量x创建y的副本。这样,两个变量将彼此独立:

>>> x = [1, 2, 3]
>>> 
>>> def change(x):
...     y = x[:] # create a copy of x and not a reference
...     y.append(4) # change the copy
...     return y
... 
>>> x # before change
[1, 2, 3]
>>> change(x)
[1, 2, 3, 4]
>>> x # after change
[1, 2, 3]
>>>