2016-10-20 5 views
1

Pythonでは、すべてが「参照」です。単純なプログラムでは、私はクラスを持っている:Pythonのオブジェクトの静的リスト

class Watch(object): 
    def __init__(self, **kwargs): 
     self.variables = kwargs 

    def set_variable(self, k, v): 
     self.variables[k]=v 

    def get_variable(self, k): 
     return self.variables.get(k, None) 

    def print_info(self): 
     for k in self.variables: 
      print k + ": " + str(self.variables[k]) 

私が行う場合:

list = [] 
tmp = Watch() 
tmp.set_variable('name','frank') 
list.append(tmp) 
tmp.set_variable('name','doug') 

その後、

list[0].get_variable('name') 

は、私は、一時的な変数を格納するにはどうすればよい "ダグ"

です追加した後に配列を維持しながらリストまたは配列ですか?

編集:How to clone or copy a list?と似ていますが、私はPythonのオブジェクトストレージのプロパティについてさらに詳しく知りたいと思います。オブジェクトは単に内容を渡すのではなく、ポインタとして扱われるようです。誰かがそれに話すことができますか?例えば、Cのような言語で++私は

list[0]=tmp 

を言うことができるし、私は、TMPを変更することができ、リスト[0]のままでしょう。

+3

あなたは何を期待したのですか?あなたはtmp 'name'を' doug'に更新しました。それは返されたものです – sisanared

+1

try:list.append(copy.copy(tmp)) –

+0

組み込みオブジェクトを上書きする変数を作成しないでください...私はちょっと内側に死ぬでしょう – Aaron

答えて

3

私が正しく理解していれば、あなたはその後tmpを変更する場合は、リスト中のtmpのコピーが同じままとなるように、あなたのリストにtmpのコピーを置きたいですか?そう、あなたはおそらくcopyモジュールを使用する場合は

list = [] 
tmp = Watch() 
tmp.set_variable('name','frank') 
list.append(copy.deepcopy(tmp)) 
tmp.set_variable('name','doug') 
list[0].get_variable('name') # returns 'frank' 
+0

またはtmp変数なしで直接割り当てる: 'lst.append(Watch()。set_variable( 'name'、 'frank ')) ' – Aaron

+0

@Aaronおそらくそれが使用される方法だと思います。 –

関連する問題