2017-02-09 43 views
-1

元のオブジェクトが変更されたときに変更されないPythonクラスオブジェクトのコピーを作成したいと思います。私はB = Aを設定すると、これはちょうどこのため、オブジェクトAにBポイントを意味し、私はAを変更したときにそれは同様にBを変更し、私の理解から、Pythonでオブジェクトインスタンスのコピーを作成する

class counterObject: 
    def __init__(self): 
     self.Value = 0 

    def incrementValue(self): 
     self.Value += 1 

    def printValue(self): 
     print(self.Value) 

A = counterObject() 
A.incrementValue() 
A.printValue() #Prints 1 

B = A 
A.incrementValue() 
B.printValue() #Currently prints 2. Want to be 1 

:ここに私の簡単な実施例です。代わりにAと同じプロパティを持つBを新しいインスタンスにすることはできますが、Aを変更すると変更されませんか?上記の例では、Aを増やすとBの値が1にとどまります。

AとBがオブジェクトではなくリストであれば、私はB = list(A)と書くでしょう。私はクラスオブジェクトのための同様のメソッドがあるかどうか尋ねていると思いますか?

ありがとうございました!

+0

それはあなたがシングルトンをしたいよう... –

+0

Pythonはあなたがカバーして聞こえる:Pythonのドキュメントから: https://docs.python.org/2 /library/copy.html – DaOnlyOwner

答えて

1

コピーを作成したい場合は、一つの方法は、deepcopyを使用している:

from copy import deepcopy 
B = deepcopy(A) 

すべて=はありませんが、メモリ内の同じオブジェクトへの別の参照を割り当てることです。 deepcopyは、新しいオブジェクト全体をメモリ内に作成し、値はABとなります。次のない場合は、別のプリントが表示されます。

B = A 
print(id(A), id(B)) # Same ids 

B = deepcopy(A) 
print(id(A), id(B) # Different ids 
関連する問題