How does python change the value of input variable in a function even when it's assigned to another variable?
本问题已经有最佳答案,请猛点这里访问。
我想定义一个以列表x为输入变量的函数,假设我想在执行函数后保持输入变量(x)的值不变,我想我应该做的是将输入变量(x)的值赋给另一个变量(y),并对这个新变量(y)进行计算,最后返回y。ping输入变量x不动(这是代码中的第二个函数)。
实现该代码会得到相同的结果,就好像我没有添加新的变量y并在y上执行计算一样。x的值会改变。(其结果与第一个函数相同)
我发现,通过构造一个空列表y,然后将x的值一个一个地添加到y,然后对y执行操作,间接地将x的值赋给y,就可以解决这个问题(如代码中的第三个函数)。
我的问题是,为什么python要这样做?当我把x的值赋给y并对y进行计算时,x是否保持不变?我错过了什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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) |
what am I missing?
问题在于Python变量的工作方式。当您将列表
您需要显式地告诉python创建一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> 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] >>> |