当我改变一个变量时,为什么两个变量都改变了?python

当我改变一个变量时,为什么两个变量都改变了?python,python,numpy,Python,Numpy,我有下面给出的代码。当我运行代码时,所有的x1,x2和x3都有相同的值。根据逻辑x1应该有随机数,x2也有随机数,x3应该有0和1 import numpy as np def reluDerivative(x): yy=x; yy[yy<=0] = 0 yy[yy>0] = 1 return yy x1=np.random.uniform(-1, 1,10) x2=x1 x3=reluDerivative(x1) 将numpy导入为np def

我有下面给出的代码。当我运行代码时,所有的x1,x2和x3都有相同的值。根据逻辑x1应该有随机数,x2也有随机数,x3应该有0和1

import numpy as np
def reluDerivative(x):
    yy=x;
    yy[yy<=0] = 0
    yy[yy>0] = 1
    return yy

x1=np.random.uniform(-1, 1,10)
x2=x1
x3=reluDerivative(x1)
将numpy导入为np
def reluDerivative(x):
yy=x;
yy[yy0]=1
返回yy
x1=np.随机均匀(-1,1,10)
x2=x1
x3=相对竞争性(x1)

您只需给出相同的列表
x1
另一个名称:
x2
,该bot指向相同的数据。修改一个也就是修改另一个指向的数据

您需要(浅)复制:


您应该将python变量视为标签,因此当您执行
x2=x1
操作时,您只是在为内存中的相同数据创建一个新标签,这在可变和不可变对象的行为上是不同的,例如:

x1 = []
x2 = x1
x2.append(10)
print(x2)
print(x1)
打印时将产生以下结果:

[10]
[10]
因为
x2
x1
都标记了相同的列表。这是可变对象和不可变对象的行为:

x1 = 10
x2 = x1
x2 += 5
print(x2)
print(x1)
将打印:

15
10
因为在这种情况下,由于
+
操作,重新分配
x2
来标记新创建的
15

解决方案只是从原始对象复制数据(对于numpy对象):


该副本答案中的
[:]
语法不能用于numpy数组,但
x2=x1.copy()
会。
x1 = 10
x2 = x1
x2 += 5
print(x2)
print(x1)
15
10
x2 = np.copy(x1)