Как бы я скопировал все свойства класса в новый экземпляр класса. В приведенном ниже примере с тем, как работает 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)
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)
Вы можете написать конструктор копирования. Например...
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)
Используйте copy
:
import copy
b = copy.deepcopy(a)
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.