保持"指针"的最佳方法是什么?到列表中的对象?

时间:2017-04-03 16:40:50

标签: python

我有一个对象列表。一旦创建,列表将不会更改 - 但对象属性的值将更改。

我需要保持两个"指针"在任何时候进入列表。例如"这个" "那"

我能做到这一点只是保留两个数字索引:

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)

所有操作都将在"这个"影响列表中的对象,而不是它的副本,即会保留更改吗?

3 个答案:

答案 0 :(得分:2)

  

所有操作都将在"这个"影响列表中的对象,而不是它的副本,即会保留更改吗?

是。该列表仅包含对相同对象的引用。

  

保持"指针"的最佳方法是什么?到列表中的对象?

你已经提到" 一旦创建,列表就不会改变",关于维护索引是否更好的许多争论列表,或只是对象本身,在这里是无关紧要的。

那么你如何处理指数?

  • 如果使用索引来访问对象(通过list.__getitem__),那么您也可以直接维护对这些对象的引用。
  • 如果您关心指数的价值,例如列表中这对项目之间的距离,或者是否位于列表的开头/结尾/中间,然后使用整数。

自定义类可能是一个不错的选择,但您必须发布更多代码并描述用例以获得可靠的推荐。

答案 1 :(得分:1)

只要您不重新分配对象本身,任何一种方法都可以。这些对象是可变类型吗?

重新分配还取决于 doSomething 方法的工作方式。

我强烈建议您在发布之前进行应该进行的研究:编写您想要做的简单版本的代码,逐一尝试,并查看每个版本是否具有您需要的功能。

如果它们都有效,那么您需要根据软件设计问题做出决定:它是否易于阅读?它快吗?容易维护吗?其他人是否容易理解?

例如,有几次,我选择了一个较慢的算法(例如冒泡排序而不是基于指针的合并排序)因为列表永远不会变得足够大以使时间差异变得重要,并且冒泡排序是<在我的小组中,现在或将来,任何软件负责人都可以理解和维护。

答案 2 :(得分:1)

TL; DR:是的,thisthat的所有更改都会显示在列表中。这是因为变量赋值在Python中的工作方式 - (变量)名称是对值的引用。

请参阅本文,了解变量赋值在python中的工作原理:Facts and myths about Python names and values

文章中有用的片段:“Python赋值语句将左侧的符号名称与右侧的值相关联。在Python中,我们说名称是指值,或者名称是引用一个值...如果你有列表元素引用其他可变值,比如子列表,重要的是要记住列表元素只是对值的引用。“

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

相关问题