在Python程序中处理大量对象

2024-04-26 01:04:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个python程序,它将使用数千个python对象。我很好奇什么是最优雅的组织它们的方式,我也不清楚什么时候用python复制东西。在

例如,如果我有一个manager对象,它有一个由数千个对象组成的列表,但是它也有一个字典,其中每个对象都有关键字,那么这些对象在内存中存在两次吗?如果我要更改列表中某个对象的属性,它是否也会更改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

那么,如果我要创建第二个manager对象并将第一个manager的一些对象给它,它们会是副本吗?或者,第二个经理所做的更改是否适用于第一个经理所欠的对象?例如,这里发生了什么:

^{pr2}$

第一个管理器中该对象的名称是否更改?dict键还是旧名称吗?在

最后,一个由数千个对象组成的列表或dict是组织大量python对象的最佳方法吗,还是有更好的方法我没有遇到过?非常感谢你的帮助。在


Tags: of对象方法self名称列表属性objects
1条回答
网友
1楼 · 发布于 2024-04-26 01:04:26

This post讨论通过引用传递变量(Python通过赋值传递)。在

[If] I have a manager object which has a list of thousands of objects, but it also has a dictionary with keys to each of those thousands of objects, do the objects exist twice in memory? If I were to change the properties of an object in the list, will it also change the properties of the corresponding object in the dict?

当您通常将对象名称用于字典中的键或值时,您将传递对该对象的引用。如果要更新对象中的某个值,字典(或列表)中的值也将更新。在

>>> 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

如果你把这个词放在一个物体里面,它的行为也会是一样的。在

Then, if I were to create a second manager object and give it some of the first manager's objects, would they be copies?

不,它们也可以作为参考。如果更改其中一个管理器的名称,则另一个管理器也会受到影响。在

Finally, is a list or dict of thousands of objects really the best way to organize lots of python objects, or is there a better way I haven't come across?

你用Python对象做什么?你需要穿过它们吗?您是否尝试根据某些条件筛选对象?您是否需要快速检查某些值的存在?有必要在内存中保存数千个对象吗?在

如果没有更多的信息,这部分问题就不容易回答。在

相关问题 更多 >