Python:引用、词典和列表

Python:引用、词典和列表,python,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.mm

我刚刚开始使用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])
它在一个类中,“points”是一个包含列表的字典:

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[:]}
我知道[:]与引用和列表有关。但是什么呢



如前所述,
中的每个条目都指向同一个对象,
坐标
。更改其中任何一个都会更改坐标,因此所有其他坐标都会更改。

对,明白了。但是应该如何用python的方式来实现呢?或者理解(例如,
{'leftleft':[c代表c坐标]}
)。如果您真的想避免这个错误,请将
坐标
设置为一个元组,这样就不可能直接修改。谢谢,我将深入研究元组,并尝试了解它们及其行为。
somelist[:]
创建
somelist
的浅拷贝。这是
somelist[0:len(somelist)]
.wrt/“使用引用时”的快捷方式,答案是:谢谢!在那个网站上解释得很好。