我有一个对象列表。一旦创建,列表将不会更改 - 但对象属性的值将更改。
我需要保持两个"指针"在任何时候进入列表。例如"这个" "那"
我能做到这一点只是保留两个数字索引:
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)
所有操作都将在"这个"影响列表中的对象,而不是它的副本,即会保留更改吗?
答案 0 :(得分:2)
所有操作都将在"这个"影响列表中的对象,而不是它的副本,即会保留更改吗?
是。该列表仅包含对相同对象的引用。
保持"指针"的最佳方法是什么?到列表中的对象?
你已经提到" 一旦创建,列表就不会改变",关于维护索引是否更好的许多争论列表,或只是对象本身,在这里是无关紧要的。
那么你如何处理指数?
list.__getitem__
),那么您也可以直接维护对这些对象的引用。 自定义类可能是一个不错的选择,但您必须发布更多代码并描述用例以获得可靠的推荐。
答案 1 :(得分:1)
只要您不重新分配对象本身,任何一种方法都可以。这些对象是可变类型吗?
重新分配还取决于 doSomething 方法的工作方式。
我强烈建议您在发布之前进行应该进行的研究:编写您想要做的简单版本的代码,逐一尝试,并查看每个版本是否具有您需要的功能。
如果它们都有效,那么您需要根据软件设计问题做出决定:它是否易于阅读?它快吗?容易维护吗?其他人是否容易理解?
例如,有几次,我选择了一个较慢的算法(例如冒泡排序而不是基于指针的合并排序)因为列表永远不会变得足够大以使时间差异变得重要,并且冒泡排序是<在我的小组中,现在或将来,任何软件负责人都可以理解和维护。
答案 2 :(得分:1)
TL; DR:是的,this
和that
的所有更改都会显示在列表中。这是因为变量赋值在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