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

问题描述 投票:0回答:2

在这段代码中,我期待list A具有相同的值,即使我将其分配给另一个temp变量,然后使用函数A打印参数foo。但是,如果A是标量,例如A=3然后A的价值即使在调用foo后仍保持不变。

我哪里错了?变量范围有问题吗?我找到了一些相关的Strange behavior of lists in python答案,但无法弄清楚我的问题。

A = [ [ 0 for i in range(3) ] for j in range(3) ]

def foo(input):

    temp= input
    temp[0][0]=12
    print(input)

print(A)
answer = foo(A)

输出:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[12, 0, 0], [0, 0, 0], [0, 0, 0]]
python list
2个回答
0
投票

而不是输入,使用.copy这将生成数组的副本并为temp分配新地址,你做的是浅拷贝,其中temp = input,只是将输入数组的地址复制到temp,而不是复制的清单。

所以你可能做foo(A.copy())temp=input.copy()也注意输入不是一个好名字,因为它已经分配给python函数,使用像foo_arg之类的东西


0
投票

请这个,我用了深度镜

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]]
© www.soinside.com 2019 - 2024. All rights reserved.