函数在Python中更改列表值而不是变量值
让我们看一个简单的代码:
y = [1,2,3]def plusOne(y): for x in range(len(y)): y[x] += 1 return yprint plusOne(y), y a = 2def plusOne2(a): a += 1 return aprint plusOne2(a), a
“ y”的值会更改,但“ a”的值保持不变。我已经知道这是因为一个是可变的,而另一个则不是。但是,如何更改代码以使函数不更改列表呢?
例如,要做类似的事情(为简单起见,使用伪代码):
a = [1,2,3,...,n]function doSomething(x): do stuff with x return x b = doSomething(a)if someOperation(a) > someOperation(b): do stuff
编辑:对不起,但是我对嵌套列表还有另一个问题。参见以下代码:
def change(y): yN = y[:] for i in range(len(yN)): if yN[i][0] == 1: yN[i][0] = 0 else: yN[i][0] = 1 return yN data1 = [[1],[1],[0],[0]]data2 = change(data1)
在这里不起作用。为什么?再次:如何避免这个问题?我知道为什么它不起作用:yN = y [:]将y的值复制到yN,但是这些值也是列表,因此对于列表中的每个列表,操作都必须加倍。如何使用嵌套列表执行此操作?
米脂
智慧大石
相关分类