在这段代码中,我期望undefined
将具有相同的值,即使我将其分配给另一个list A
变量,然后使用函数{{1 }}。但是,如果A是标量,例如temp
,那么即使调用A
,foo
的值仍保持不变。
我要去哪里错了?变量范围是否存在问题?我找到了一些相关的Strange behavior of lists in python答案,但无法解决我的问题。
A=3
输出:
A
答案 0 :(得分:0)
使用.copy
代替输入,这将复制数组并为temp分配新地址,您要做的是浅复制,其中temp = input,仅将输入数组的地址复制到临时,而不是复制列表。
因此,您可能会做foo(A.copy())
或temp=input.copy()
,但也要注意输入不是好名字,因为它已经分配给python函数,请使用foo_arg之类的东西
答案 1 :(得分:0)
对此,我使用了 deepcopy
from copy import copy, deepcopy
A = [ [ 0 for i in range(3) ] for j in range(3) ]
def foo(input):
temp = deepcopy(input)
temp[0][0]=12
return temp
print('origin', A)
answer = foo(A)
print('after', A)
print('result', answer)
结果:
origin [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
after [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
result [[12, 0, 0], [0, 0, 0], [0, 0, 0]]