Python-在数组数组中设置值

时间:2018-11-18 06:35:05

标签: python arrays python-3.x python-2.7 list

我具有以下功能:

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

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

1 个答案:

答案 0 :(得分:2)

可能是因为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]]