簡體   English   中英

Python:參考資料,字典和清單

[英]Python: References, dictionaries and lists

我剛剛開始使用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[:]}

我知道[:]與引用和列表有關。 但是呢


[:]在python中的含義

Python復制手冊

如所寫,每個以points為單位的條目都points相同的對象, coordinate 更改其中任何一個都會更改coordinate ,因此也會更改所有其他coordinate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM