首页 > 解决方案 > Python - 在数组数组中设置值

问题描述

我有以下功能:

def set_x(self,index1, index2, val):
    print('Setting X with index1 : ' + str(index1) + ' , index2 : ' + str(index2) + ' with value : ' + str(val))
    print(self.x)
    self.x[index1][index2] = val
    print(self.x)
    print('hehe')

例如,我用参数 0、1 和 785 调用它。实际输出如下:

Setting X with index1 : 0 , index2 : 1 with value : 785
[[305, 665], [305, 665]]
[[305, 785], [305, 785]]

我期待它是:

Setting X with index1 : 0 , index2 : 1 with value : 785
[[305, 665], [305, 665]]
[[305,785],[305,665]]

就像我的任务是设置数组中所有数组的所有第二个元素。我将如何解决它?

标签: pythonarrayspython-3.xpython-2.7list

解决方案


可能是因为 self.x 中的两个列表引用了同一个列表。这取决于您最初是如何创建 x 的。看这个例子

a=[305,665]
x = []
x.append(a)
x.append(a)
x[0][1]=3
print(x)
#[[305, 3], [305, 3]]

当您设置值 ox x[0][1] 时,您真正要做的是更改 a[1] 的值,因此两个列表都在更改。您应该改用列表的副本。

from copy import deepcopy
a = [305, 665]
x = []
x.append(deepcopy(a))
x.append(deepcopy(a))
x[0][1] = 3
print(x)
#[[305, 3], [305, 665]]

推荐阅读