2016-07-04 1 views
2

私は何千ものPythonオブジェクトで動作するようなPythonプログラムを構築しています。私は、それらを整理する最もエレガントな方法が何であるか興味があります。また、いつ物事がPythonでコピーされるかについてもわかりません。Pythonプログラムでたくさんのオブジェクトを扱う

たとえば、何千ものオブジェクトの一覧を持つマネージャオブジェクトがありますが、そのオブジェクトの数千のオブジェクトのそれぞれに対応するキーを持つ辞書がある場合、そのオブジェクトはメモリ内に2回存在しますか?リスト内のオブジェクトのプロパティを変更する場合は、そのオブジェクト内の対応するオブジェクトのプロパティも変更されますか?

私はこのことについてよく読めないので、誰かが正しい方向に私を指すことができれば助けになります。

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 

その後、私は彼らがコピーになり、二マネージャオブジェクトを作成し、それを最初マネージャのオブジェクトのいくつかを与えることをした場合:ここで

は、私が考えている何ですか?あるいは、第2の管理者によってなされた変更は、第1の管理者が負うオブジェクトに適用されますか?たとえば、ここではどうなりますか:

manager2 = Manager(manager1.myobjects[5000:10000]) 
manager2.myobjects[71].name = "newname" 

最初のマネージャーでそのオブジェクトの名前が変更されていますか? dictキーはまだ古い名前ですか?

最後に、何千ものオブジェクトの一覧や辞書が本当に多くのPythonオブジェクトを整理する最も良い方法ですか、それとも私が見逃した良い方法はありますか?助けてくれてありがとう。

+0

データベース、ORM、およびクラスを必要に近づいているように聞こえます。リンクされたポスト –

答えて

0

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をオブジェクトの内部に配置する場合は、同じように動作します。

次に、第2のマネージャオブジェクトを作成し、それに最初のマネージャオブジェクトを渡すと、それらはコピーになりますか?

いいえ、それらも参考になります。いずれかのマネージャーから名前を変更すると、もう一方のマネージャーも影響を受けます。

最後に、何千ものオブジェクトの一覧や辞書が本当に多くのPythonオブジェクトを整理する最良の方法ですか、それとも私が見逃した良い方法はありますか?

あなたはPythonオブジェクトをどのように使用していますか?あなたはそれらを通過する必要がありますか?いくつかの基準に基づいてオブジェクトをフィルタリングしようとしていますか?あなたはある価値の存在をすばやく確認する必要がありますか?何千ものオブジェクトを記憶しておく必要がありますか?

は、より多くの情報がなければ、質問のこの部分は簡単にはお答えできません。

+0

おかげで、私が探していたまさにです。 – csc

関連する問題