我具有以下功能:
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]]
这就像我的任务是设置数组中所有数组的所有第二个元素。我该如何解决?
答案 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]]