即使将输入变量分配给另一个变量,python如何更改函数中输入变量的值? [复制]
Posted
技术标签:
【中文标题】即使将输入变量分配给另一个变量,python如何更改函数中输入变量的值? [复制]【英文标题】:How does python change the value of input variable in a function even when it's assigned to another variable? [duplicate] 【发布时间】:2017-05-24 10:42:35 【问题描述】:我想定义一个函数,其中 a list x 是它的输入变量,假设我想在执行函数后使输入变量 (x) 的值不变,我认为我应该做的是将输入变量 (x) 的值分配给另一个变量 (y) 并对这个新变量 (y) 进行计算并在最后返回 y 保持输入变量 x 不变(这是第二个函数代码)。
实现该代码给出的结果与我没有添加新变量 y 并对 y 执行计算一样。 x 的值发生了变化。 (它给出的结果与第一个函数相同)
我发现通过构造一个空列表 y 然后将 x 的条目一个接一个地添加到 y 然后对 y 执行操作来间接地将 x 的值分配给 y 可以解决问题(如在第三个函数中代码)。
我的问题是,python 为什么要这样做?当我将 x 的值分配给 y 并对 y 进行计算时,不应该是这样吗?我错过了什么?
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】:我错过了什么?
您的问题在于 Python 变量的工作方式。您会看到,当您将列表 x
分配给变量 y
时,您并没有创建 x
的副本。而是您为列表x
创建引用。这意味着当任一变量(x
或 y
)发生变化时,它们都会发生变化,因为它们都指向完全相同的列表。
您需要显式地告诉 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]
>>>
【讨论】:
好技巧,非常感谢:) @FawzyHegab 非常感谢 Fawzy。以上是关于即使将输入变量分配给另一个变量,python如何更改函数中输入变量的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章