Python if语句上的条件变量正在被该语句更改,即使它没有';不要出现在声明中。为什么?

Python if语句上的条件变量正在被该语句更改,即使它没有';不要出现在声明中。为什么?,python,numpy,atom-editor,Python,Numpy,Atom Editor,我想创建两个矩阵。然后根据第一个矩阵中的数字更改第二个矩阵的数字。所以我生成一个关于我的第一个矩阵的If语句,如果为真,这将导致我的第二个矩阵发生变化。但是,它会导致两个矩阵的变化 我的代码可以完美地处理一位数的对象。只有当我尝试将其应用于矩阵时才会发生 import numpy as np n = 3 matr = np.zeros((n,n)) matr[0][0] = 1 matr2 = matr print(matr) [[1. 0. 0.] [0. 0. 0.] [0. 0. 0

我想创建两个矩阵。然后根据第一个矩阵中的数字更改第二个矩阵的数字。所以我生成一个关于我的第一个矩阵的If语句,如果为真,这将导致我的第二个矩阵发生变化。但是,它会导致两个矩阵的变化

我的代码可以完美地处理一位数的对象。只有当我尝试将其应用于矩阵时才会发生

import numpy as np
n = 3
matr = np.zeros((n,n))
matr[0][0] = 1
matr2 = matr

print(matr)
[[1. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

print(matr2)
[[1. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

if matr[0][0] == 1:
    matr2[0][0] = 9

print(matr)
[[9. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

print(matr2)
[[9. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
因为“matr”在我的if语句中不作为主语出现,所以它不应该被改变,对吗

x = 1
y = x

if x == 1:
    y = 9

print(x)
1
print(y)
9

这两个变量只是对同一个矩阵的两个引用,而不是两个不同的矩阵
matr2=matr
只是创建了对同一矩阵的新引用


语句
matr2[0][0]=9
修改了示例中唯一存在的矩阵,它与使用
matr[0][0]=9

完全相同。这两个变量只是对相同数据的两个引用,而不是两个不同的矩阵。您应该在NumPy中查看视图和副本。