处理Python程序中的大量对象
我正在构建一个
python程序,它将使用数千个python对象.我很好奇组织它们的最优雅方式是什么,我也不清楚什么时候在python中复制.
例如,如果我有一个具有数千个对象列表的管理器对象,但它也有一个字典,其中包含数千个对象中的每一个的键,那么这些对象在内存中是否存在两次?如果我要更改列表中对象的属性,它是否也会更改dict中相应对象的属性? 我找不到很好的阅读,所以如果有人能指出我正确的方向,那将是有益的. 这就是我的想法: class Manager(): def __init__(self,list_of_objects): self.myobjects = [] self.myobjectsdict= {} self.myobjects = list_of_objects for object in self.myobjects: self.myobjectsdict[object.name] = object 然后,如果我要创建第二个管理器对象并给它一些第一个管理器的对象,它们会是副本吗?或者第二个经理所做的更改是否适用于第一个所欠的对象?例如,这里发生了什么: manager2 = Manager(manager1.myobjects[5000:10000]) manager2.myobjects[71].name = "newname" 第一个管理器中该对象的名称是否更改? dict键仍然是旧名吗? 最后,数千个对象的列表或字典真的是组织大量python对象的最佳方式,还是有更好的方式我没有遇到过?非常感谢您的帮助. 解决方法
This post讨论了通过引用传递变量(Python通过赋值传递).
当您通常使用对象名称作为字典中的键或值时,您将传递对该对象的引用.如果要更新对象中的某个值,则还将更新字典(或列表)中的值. >>> my_object = MyClass() # Myclass is instantiated with x = 10 >>> my_dict = {"my_obj":my_object} >>> my_dict["my_obj"] is my_object True >>> my_dict["my_obj"].x 10 如果你将这个dict放在一个对象中,它的行为方式会相同.
不,他们也会被引用.如果您从任一管理器更改名称,则另一个管理器也会受到影响.
你在使用Python对象的是什么?你需要遍历它们吗?您是否尝试根据某些条件过滤对象?你需要快速检查是否存在某些价值?是否有必要在内存中保留数千个对象? 没有更多信息,这部分问题就不容易回答. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |