我编写了一个简单的类,它具有一个初始化阶段,取决于某个变量,它会覆盖前一个变量。
在提供输入时是否必须制作副本才能不覆盖变量?
举例说明:
import numpy as np
Input = np.array([ [0,1], [1,1] ])
class A:
def __init__(self, I):
self.B = I
当我写:
Trial = A(Input)
Trial.B
它正确地给出了:
array[[0,1]
[1,1]]
如果我想进行彻底的更改,例如:
Trial.B = 'Hello'
不会更改输入。但是,如果我重复这一切直到这一点,现在我们写下而不是这个改变另一个像:
Trial.B[0] = 2
现在,如果我要求输入,它会给出:
np.array([[2,2]
[1,1]])
现在它已经改变了变量Input!
为什么会这样?我必须总是写:
class A:
def __init__(self, I):
self.B = I.copy()
为了不弄乱变量?为什么只有当变化的数据类型与变量中的数据相同时才会弄乱它?
感谢。
答案 0 :(得分:1)
您的Trial.B
指针指向Input
并且您将指针更改为'Hello'
。
在第二个示例中,您访问了Trial.B
指向并更改它的数据。
如果您使用以下方式测试Input
和Trial.B
Trial.B is Input
#True
你会得到这个结果,表明两者都指向同一个对象。