2017-02-09 2 views
-1

Ich möchte eine Kopie eines Python-Klassenobjekts erstellen, das sich nicht ändert, wenn sich das ursprüngliche Objekt ändert. Hier ist mein einfaches Arbeitsbeispiel:Kopie der Objektinstanz in Python erstellen

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 

Von meinem Verständnis, wenn ich B = A gesetzt ist, bedeutet dies einfach, B zeigt auf das Objekt A. Daher, wenn ich eine Änderung ändert B als auch. Ist es möglich, B stattdessen eine neue Instanz mit den gleichen Eigenschaften wie A zu machen, ändert sich aber nicht, wenn ich A ändere? In meinem obigen Beispiel möchte ich, dass der Wert für B bei 1 bleibt, wenn ich A inkrementiere.

Wenn A und B Listen statt Objekte wären, würde ich B = Liste (A) schreiben. Ich frage mich, ob es eine ähnliche Methode für Klassenobjekte gibt?

Vielen Dank im Voraus für Ihre Hilfe!

+0

Es klingt wie Sie ein Singleton wollen ... –

+0

Python hat für Sie: Von den Python-Dokumentation: https://docs.python.org/2 /library/kopie.html – DaOnlyOwner

Antwort

1

Wenn Sie eine Kopie dann einen Weg machen wollen, wird mit deepcopy:

from copy import deepcopy 
B = deepcopy(A) 

Alle = tut, ist eine weitere Referenz auf das gleiche Objekt im Speicher zuweisen. Die deepcopy erstellt ein ganz neues Objekt im Speicher mit den Werten A und B wird darauf verweisen. wenn Sie die folgende Sie werden verschiedene Drucke sehen:

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

B = deepcopy(A) 
print(id(A), id(B) # Different ids 
Verwandte Themen