我们来看一个简单的代码:
y = [1,2,3]
def plusOne(y):
for x in range(len(y)):
y[x] += 1
return y
print plusOne(y), y
a = 2
def plusOne2(a):
a += 1
return a
print 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,但这些值也是列表,因此对于列表中的每个列表,操作必须加倍。如何使用嵌套列表执行此操作?