Как бы я скопировал все свойства класса в новый экземпляр класса. В приведенном ниже примере с тем, как работает python, когда я использую b = a, он назначает b и a одному и тому же адресу памяти. Когда я делаю изменение в «b», изменение также вносится в «a». Оба элемента списка хранятся по одному адресу

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)

ИЗМЕНИТЬ

Я хотел бы добиться того же эффекта, что и

 b=copy.deepcopy(a)

Но благодаря этому использованию.

b=test(a)
1
Bigbob556677 29 Авг 2017 в 17:39

3 ответа

Лучший ответ

Это достигло того, что я хотел сделать.

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
Bigbob556677 29 Авг 2017 в 15:22

Вы можете написать конструктор копирования. Например...

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
Maciej Jureczko 29 Авг 2017 в 14:59

Используйте copy:

import copy
b = copy.deepcopy(a)
0
Stuart 29 Авг 2017 в 14:41