在Python中修改嵌套列表的元素时出现问题

时间:2019-03-03 07:44:43

标签: python list

在这段代码中,我期望undefined将具有相同的值,即使我将其分配给另一个list A变量,然后使用函数{{1 }}。但是,如果A是标量,例如temp,那么即使调用Afoo的值仍保持不变。

我要去哪里错了?变量范围是否存在问题?我找到了一些相关的Strange behavior of lists in python答案,但无法解决我的问题。

A=3

输出:

A

2 个答案:

答案 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]]