0

我在 stackoverflow 上看到了类似的问题,但没有得到令人满意的回答。(链接到这个问题 -如何复制 python 类?

所以我的问题是,是否有任何可能的方法来创建存储在变量 A 中的类的副本(类的实例)并将该类的副本分配给新的变量 B,而不会使这些变量 A 和 B 相互依赖?

要清楚 - 有没有一个非常简单的方法?

模型情况将是:

class B:
    def __init__(self, li):
        self.l = li * 5
        self.u = 5       

class A:
    def __init__(self):
        self.x = [1, 2, 3]
        self.c = B([45, 1, 3])
    self.i = 1

x = A()
y = x #This copies only reference to x
4

3 回答 3

4

为您的类实现__copy__(),然后您可以使用它copy.copy()来创建实例的副本。由于 Python 对象的性质,这不能自动完成(无法知道将在实例上设置哪些变量,也无法知道它是如何发生变异的,这取决于您确保复制数据正确)。

通常,假设一个以正常方式运行的类,对于假定的类__copy__()可能是这样简单的SomeClass

def __copy__(self):
    return SomeClass(self.somefield, self.otherfield, self.somethingelse)

自然,确切的实现将根据类本身而大不相同。

于 2013-01-18T15:32:31.567 回答
1

如果要创建对象的单独副本,请尝试复制模块

于 2013-01-18T15:32:21.820 回答
0

deepcopycopy模块中使用更简单。呃,伙计们,这些微妙问题的解决方案是:http: //docs.python.org/2/library/copy.html#copy.deepcopy

于 2013-01-18T16:23:19.370 回答