是否有必要在 类 中使用 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
指向的数据并更改了它。
如果您要测试 Input
和 Trial.B
使用:
Trial.B is Input
#True
你会得到这个结果,表明两者都指向同一个对象。
我写了一个简单的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
指向的数据并更改了它。
如果您要测试 Input
和 Trial.B
使用:
Trial.B is Input
#True
你会得到这个结果,表明两者都指向同一个对象。