Python:参考资料,字典和清单

时间:2018-07-18 09:16:12

标签: python

我刚刚开始使用Python编写代码,并且仍然可以用于引用以及引用的使用位置和不使用的位置。

我编写了以下代码:

dummyList = self.getSprayLocation(heading, "left")
self.points['leftLeft'][0] = self.armLocations['leftX'] - self.mmToCoor(dummyList[0])
self.points['leftLeft'][1] = self.armLocations['leftY'] - self.mmToCoor(dummyList[1])
self.points['rightLeft'][0] = self.armLocations['leftX'] + self.mmToCoor(dummyList[0])
self.points['rightLeft'][1] = self.armLocations['leftY'] + self.mmToCoor(dummyList[1])
dummyList = self.getSprayLocation(heading, "mid")
print(self.points['leftLeft'][1])

self.points['leftMid'][0] = self.armLocations['midX'] - self.mmToCoor(dummyList[0])
self.points['leftMid'][1] = self.armLocations['midY'] - self.mmToCoor(dummyList[1])
self.points['rightMid'][0] = self.armLocations['midX'] + self.mmToCoor(dummyList[0])
self.points['rightMid'][1] = self.armLocations['midY'] + self.mmToCoor(dummyList[1])
print(self.points['leftLeft'][1])

dummyList = self.getSprayLocation(heading, "right")
self.points['leftRight'][0] = self.armLocations['rightX'] - self.mmToCoor(dummyList[0])
self.points['leftRight'][1] = self.armLocations['rightY'] - self.mmToCoor(dummyList[1])
self.points['rightRight'][0] = self.armLocations['rightX'] + self.mmToCoor(dummyList[0])
self.points['rightRight'][1] = self.armLocations['rightY'] + self.mmToCoor(dummyList[1])
print(self.points['leftLeft'][1])

它在一个类中,其中“点”是包含列表的字典:

coordinate = [0, 0]
points = {'leftLeft':coordinate, 'rightLeft':coordinate, 'leftMid':coordinate, 'rightMid':coordinate, 'leftRight':coordinate, 'rightRight':coordinate}

请注意,在每个代码块之后,我都打印['leftLeft'] [0]值。我希望当我不写字典中的这个键时,这个值不会改变。

但是当我运行这段代码时,这就是输出

51.861101789
51.8611355556
51.8611192766

这意味着值已更改。实际上,所有“ leftX”条目都是相同的,而所有“ rightX”条目都是相同的。

现在,我认为它与引用有关,但是我还没有找到解决方案。

感谢您的帮助!


编辑: 多亏了JoshuaF,我发现引用位于

coordinate = [0, 0]
points = {'leftLeft':coordinate, 'rightLeft':coordinate, 'leftMid':coordinate, 'rightMid':coordinate, 'leftRight':coordinate, 'rightRight':coordinate}

块。 “坐标”在任何地方都是相同的“坐标”。以下可以解决此问题:

coordinate = [0, 0]
points = {'leftLeft':coordinate[:], 'rightLeft':coordinate[:], 'leftMid':coordinate[:], 'rightMid':coordinate[:], 'leftRight':coordinate[:], 'rightRight':coordinate[:]}

我知道[:]与引用和列表有关。但是呢?


meaning of [:] in python

Python copy manual

1 个答案:

答案 0 :(得分:0)

按照书面规定,points中的每个条目都指向相同的对象coordinate。更改其中任何一个都会更改coordinate,因此也会更改所有其他内容。