是否有必要在 类 中使用 copy 以避免覆盖以前的变量?

Is it neccesary to use copy inside classes to avoid overwriting previous variables?

我写了一个简单的class,它有一个初始化阶段取决于一些变量,它会覆盖以前的变量。

为了不覆盖变量,在提供输入时是否一定要复制一份?

举例说明:

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()

为了不乱变量?为什么只有当改变的数据类型与变量中的相同时才会弄乱它?

谢谢。

您的 Trial.B 有一个指向 Input 的指针,您将指针更改为 'Hello'

在第二个示例中,您访问了 Trial.B 指向的数据并更改了它。

如果您要测试 InputTrial.B 使用:

Trial.B is Input
#True

你会得到这个结果,表明两者都指向同一个对象。