2017-08-29 44 views
1

如何將類的所有屬性複製到類的新實例。 在下面的例子中,用python的工作方式,當我使用b = a時,它將b和a分配給相同的內存地址。當我對「b」進行更改時,也會對「a」進行更改。 Both elements of the list are stored at the same address如何將類實例的所有屬性複製到新實例

class test: 

    def __init__(self, name="Name",data=[]): 
     self.name=name 
     self.data=data 




list=[] 
a = test("First Name",["DATA1","DATA2","DATA3"]) 
b=a 
list.append(a) 
list.append(b) 

我想實現類似列表類如何讓你這樣做是爲了列表複製到新的內存地址的東西。

list1=[1,2,3] 
list2=list(list1) 

所以在我的情況。

a = test("First Name",["DATA1","DATA2","DATA3"]) 
b=test(a) 

而不必

b=test(a.name,a.data) 

EDIT

標識喜歡才達到相同的效果

b=copy.deepcopy(a) 

但通過這種用法。

b=test(a) 
+0

[python中複製構造]的可能的複製(https://stackoverflow.com/questions/1241148/copy-constructor-in-python) –

+0

一份工作爲了什麼我需要,但是喜歡達到相同的結果沒有複製。就像列表類如何使用list2 = list(list1)id一樣能夠b = test(a) – Philip556677

回答

0

這實現了我的想這樣做。

class Test: 
    def __init__(self, arg): 
     if isinstance(somearg, self.__class__): 
      self.__dict__ = somearg.__dict__.copy() 
     else: 
      self.var = arg 

用法:

a=Test(123) 
b=Test(a) 
0

使用copy

import copy 
b = copy.deepcopy(a) 
+0

。雖然這取得了我想要的結果。我將如何編寫我的類來工作,類似於list2 = list(list1),其中b = test(a),而不使用複製類。 – Philip556677

0

你可能想要寫一個拷貝構造函數。例如...

import copy 

class Foo: 

    def __init__(self, data): 
    self._data = data 

    @classmethod 
    def from_foo(cls, class_instance): 
    data = copy.deepcopy(class_instance._data) 
    return cls(data) 
+0

複製構造函數是我需要查找的。我只是不知道它叫什麼。謝謝 – Philip556677