英文:
Copy of a class object with a numpy array as property
问题
以下是您提供的代码的翻译:
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在类内部的数组上执行此操作。
希望这能帮助您理解代码的翻译部分。
英文:
I have a class where I defined a numpy array and then I created a copy of an object of that class:
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)
If I change the value of x for TEST_1 it's ok, it doesn't affect TEST_2:
print(TEST_2.x)
TEST_1.x+=1
print(TEST_2.x)
>>>5
>>>5
But if I try to change the array of TEST_1 it also changes the array of TEST_2:
print(TEST_2.arr)
TEST_1.arr+=np.array([1,1])
print(TEST_2.arr)
>>>[5 3]
>>>[6 4]
I know it's because I have to create a copy of the array, but I don't know how to tell Python to do it when the array it's inside a class.
Thank you and sorry for the bad English.
答案1
得分: 1
好的,我成功解决了,我这样做:
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
现在复制的数组不会改变。
英文:
Ok I managed to solve it, I do this:
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
And now the array of the copy doesn't change
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论