我想定义一个以列表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)
我想念什么?
您的问题在于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]
>>>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句