簡體   English   中英

將“指針”保留在列表中的對象的最佳方法是什么?

[英]What's the best way to keep “pointers” to objects in a list?

我有一個對象列表。 創建后,列表將不會更改-但是對象的屬性值將更改。

我需要隨時在列表中維護兩個“指針”。 例如“ this”和“ that”

我可以做到這一點,只是保留兩個數字索引:

this=3
that=7
doSomething(mylist[this])
doSomethingElse(mylist[that])
this=9
doSomethingNew(mylist[this])

還是可以通過使用對對象的引用來做到這一點? 例如類似

this=mylist[3]
that=mylist[7]
doSomething(this)
doSomethingElse(that)
this=mylist[9]
doSomethingNew(this)

對“ this”的所有操作都會影響列表中的對象,而不是列表的副本,即更改將被保留嗎?

對“ this”的所有操作都會影響列表中的對象,而不是列表的副本,即更改將被保留嗎?

是。 該列表僅包含對相同對象的引用。

將“指針”保留在列表中的對象的最佳方法是什么?

您已經提到“ 創建后,列表將不會更改 ”,因此此處有關保持列表索引還是對象本身更好的許多爭論都無關緊要。

那么您如何處理索引?

  • 如果使用索引來訪問對象(通過list.__getitem__ ),那么您也可以直接在這些對象上維護引用。
  • 如果您關心索引的值,例如列表中這對項目之間的距離,或者其中一個在列表的開始/結尾/中間,則使用整數。

自定義類可能是一個不錯的選擇,但是您必須發布更多代碼並描述用例,以獲得可靠的建議。

只要您不重新分配對象本身,任何一種方法都將起作用。 這些對象是可變類型嗎?

重新分配還取決於doSomething方法的工作方式。

我強烈建議您在發布之前進行應做的研究:編寫一個簡單的版本,進行每種嘗試,並查看每個版本是否具有所需的功能。


如果它們都起作用,那么您需要根據軟件設計問題做出決定:易於閱讀嗎? 快嗎 容易維護嗎? 別人容易理解嗎?

例如,有幾次,我選擇了一種較慢的算法(例如,冒泡排序而不是基於指針的合並排序),因為列表永遠不會增長到足以使時間差變得重要的程度,而冒泡排序是任何軟件領域的先驅我的小組現在或將來都可以理解和維護。

TL; DR:是的,所有的變化thisthat將在列表中顯示出來。 這是因為變量分配在Python中的工作方式-(變量)名稱是對值的引用。

請參閱本文,了解有關變量賦值如何在python中工作的知識: 有關Python名稱和值的事實和神話

文章中的有用摘錄:“ Python賦值語句將左側的符號名稱與右側的值相關聯。在Python中,我們說名稱指的是值,或者名稱是對a的引用值...如果您有引用其他可變值的列表元素(例如子列表),請務必記住列表元素僅是對值的引用。”

另一個了解變量和賦值在Python中如何工作的有用資源: http : //python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables

暫無
暫無

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

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