Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python如何更改函数中输入变量的值,即使它';s分配给另一个变量?_Python_Function_Python 3.x - Fatal编程技术网

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

python如何更改函数中输入变量的值,即使它';s分配给另一个变量?,python,function,python-3.x,Python,Function,Python 3.x,我想用一个列表定义一个函数,它的输入变量是x,假设我想在执行函数后保持输入变量(x)的值不变,我想我应该做的是将输入变量(x)的值分配给另一个变量(y),并对这个新变量(y)进行计算最后返回y,保持输入变量x不变(这是代码中的第二个函数) 实现该代码会得到相同的结果,就像我没有添加新变量y并对y执行计算一样。x的值已更改。(其结果与第一个函数相同) 我发现,通过构造一个空列表y,然后将x的条目逐个添加到y,然后对y执行操作,间接地将x的值指定给y,解决了这个问题(如代码中的第三个函数) 我的问题

我想用一个列表定义一个函数,它的输入变量是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)
我错过了什么

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)
问题在于Python变量的工作方式。您可以看到,当您将列表
x
分配给变量
y
时,您没有创建
x
副本。而是创建对列表
x
引用。这意味着当任一变量改变(
x
y
)时,它们都会改变,因为它们都指向完全相同的列表

您需要明确地告诉Python创建变量
y
x
副本。这样,两个变量将相互独立:

>>> 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]
>>> 
我错过了什么

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)
问题在于Python变量的工作方式。您可以看到,当您将列表
x
分配给变量
y
时,您没有创建
x
副本。而是创建对列表
x
引用。这意味着当任一变量改变(
x
y
)时,它们都会改变,因为它们都指向完全相同的列表

您需要明确地告诉Python创建变量
y
x
副本。这样,两个变量将相互独立:

>>> 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]
>>> 

好把戏,非常感谢:)@FawzyHegab非常感谢Fawzy。好把戏,非常感谢:)@FawzyHegab非常感谢Fawzy。