deepcopy打破了用户定义的类中的引用关系

时间:2015-05-17 09:03:40

标签: python deep-copy

我定义了一个类,其中有一个引用关系。

然后我创建一个实例,在copy.deepcopy这个实例之后,引用关系就消失了,例如:

import numpy as np
class foo(object):
    def __init__(self):
        self.c = np.array([[1,2],[3,4]])
        self.a = self.c[1,:]

ff0 = foo()
ff1 = copy.deepcopy(ff0)

ff1.c +=np.array([10,10])
print(ff1.a)

ff0.c +=np.array([10,10])
print(ff0.a)

输出:

[3 4]
[13 14]

但我希望看到这样的输出:

[13 14]
[13 14]

有人可以帮助我保持这种关系吗?

提前谢谢〜

1 个答案:

答案 0 :(得分:0)

我解决了这个问题:

import numpy as np
class foo(object):
    def __init__(self):
        self.c = np.array([[1,2],[3,4]])
        self.a = self.c[1,:]
    def copy(self):
        cp = copy.deepcopy(self)
        cp.a = cp.c[1,:]
        return cp

ff0 = foo()
ff1 = ff0.copy()

ff1.c +=np.array([10,10])
print(ff1.a)

ff0.c +=np.array([10,10])
print(ff0.a)

输出:

[13 14]
[13 14]