2016-07-04 3 views
2

Я создаю программу 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" 

Изменено ли имя для этого объекта у первого менеджера? Будет ли ключ ключа еще старым именем?

И, наконец, список или тик тысяч объектов действительно лучший способ организовать множество объектов python, или есть лучший способ, с которым я не сталкивался? Большое спасибо за любую помощь.

+0

Похоже, вы приближаетесь к необходимости базы данных, ORM и классов. –

ответ

0

This post рассказывает о передаче переменной по ссылке (Python передает по заданию).

[If] У меня есть объект-менеджер, который имеет список тысяч объектов, но также имеет словарь с ключами для каждого из этих тысяч объектов, существуют ли объекты в два раза в памяти? Если бы я изменил свойства объекта в списке, изменит ли он также свойства соответствующего объекта в 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 внутри объекта, он будет вести себя одинаково.

Тогда, если бы я должен был создать второй объект-менеджер и передать ему некоторые из объектов первого менеджера, будут ли они копиями?

Нет, они также будут ссылками. Если вы меняете имя от одного из менеджеров, то также влияет и другой менеджер.

И, наконец, список или тик тысяч объектов действительно лучший способ организовать множество объектов python, или есть лучший способ, с которым я не сталкивался?

Для чего вы используете объекты Python? Вам нужно пройти через них? Вы пытаетесь фильтровать объекты по некоторым критериям?Вам нужно быстро проверить наличие какой-либо ценности? Нужно ли хранить тысячи объектов в памяти?

Без дополнительной информации на эту часть вопроса нельзя ответить.

+0

Спасибо, что сообщение, которое вы связали, именно то, что я искал. – csc

Смежные вопросы