一个类对象的副本,并将numpy数组作为属性

j2cgzkjk  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(183)

我有一个类,我在其中定义了一个numpy数组,然后创建了该类的一个对象的副本:

import numpy as np
import copy as cp

class Test():
    x=5
    arr=np.array([5,3])

TEST_1=Test()
TEST_2=cp.copy(TEST_1)

如果我改变了TEST_1的x值,这是可以的,它不会影响TEST_2:

print(TEST_2.x)
TEST_1.x+=1
print(TEST_2.x)

>>>5
>>>5
但是如果我试图改变TEST_1的数组,它也会改变TEST_2的数组:

print(TEST_2.arr)
TEST_1.arr+=np.array([1,1])
print(TEST_2.arr)

>>>[5 3]
>>>[6 4]
我知道这是因为我必须创建数组的副本,但我不知道如何告诉Python,当数组在类中时,要这样做。
谢谢你,抱歉英语不好。

vsdwdz23

vsdwdz231#

好吧,我设法解决了它,我这样做:

class Test():
def __init__(self):
    self.arr=np.array([5,3])
    self.x=5
    
def __deepcopy__(self, memo):
    cls = self.__class__
    result = cls.__new__(cls)
    memo[id(self)] = result
    for k, v in self.__dict__.items():
        setattr(result, k, cp.deepcopy(v, memo))
    return result

现在副本的数组不会改变

相关问题