加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

处理Python程序中的大量对象

发布时间:2020-12-20 13:12:58 所属栏目:Python 来源:网络整理
导读:我正在构建一个 python程序,它将使用数千个python对象.我很好奇组织它们的最优雅方式是什么,我也不清楚什么时候在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通过赋值传递).

[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

如果你将这个dict放在一个对象中,它的行为方式会相同.

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对象的是什么?你需要遍历它们吗?您是否尝试根据某些条件过滤对象?你需要快速检查是否存在某些价值?是否有必要在内存中保留数千个对象?

没有更多信息,这部分问题就不容易回答.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读