Python 压缩稀疏行矩阵::csr_矩阵::奇数行为

Python 压缩稀疏行矩阵::csr_矩阵::奇数行为,python,python-3.x,sparse-matrix,Python,Python 3.x,Sparse Matrix,我在代码中观察到一些奇怪的行为,这些行为一直困扰着我。以下是 from scipy.sparse import csr_matrix A = csr_matrix([[1,2,0],[0,0,3],[4,0,5]]) B = A B[0,0] = 99 我希望A.toarray()返回原始矩阵(没有更新的99值),但实际上我得到了这个结果 A.toarray() Out: array([[99, 2, 0], [ 0, 0, 3], [ 4, 0, 5

我在代码中观察到一些奇怪的行为,这些行为一直困扰着我。以下是

from scipy.sparse import csr_matrix
A = csr_matrix([[1,2,0],[0,0,3],[4,0,5]])
B = A
B[0,0] = 99
我希望
A.toarray()
返回原始矩阵(没有更新的99值),但实际上我得到了这个结果

A.toarray()

Out:
array([[99,  2,  0],
       [ 0,  0,  3],
       [ 4,  0,  5]], dtype=int32)

发生了什么事?

语句
b=a
给出了
b
a
相同的参考

i、 例如,它们都引用内存中的同一对象

对其中一项所做的任何更改显然都会反映在另一项中,因为它们是相同的,而不仅仅是相等的


相反,请使用
b=a.copy()
。这将传递给
b
一份
a

语句
b=a
的副本
b
提供了与
a
相同的引用

i、 例如,它们都引用内存中的同一对象

对其中一项所做的任何更改显然都会反映在另一项中,因为它们是相同的,而不仅仅是相等的


相反,请使用
b=a.copy()
。这传递到
b
a

a
b
是指向内存中相同对象的指针<代码>A为B
应返回True。使用方法
id(obj)
获取对象的内存地址。id(A)和id(B)的结果应该是相同的。这似乎并不取决于A是稀疏矩阵。您将在任何容器类型中看到这种行为。B=A将对同一对象的引用分配给B。由于这些对象在适当位置发生了更改
B[0,0]=
A[0,0]=
在这里完全等效
A
B
是指向内存中同一对象的指针<代码>A为B应返回True。使用方法
id(obj)
获取对象的内存地址。id(A)和id(B)的结果应该是相同的。这似乎并不取决于A是稀疏矩阵。您将在任何容器类型中看到这种行为。B=A将对同一对象的引用指定给B。由于这些对象在适当位置发生了更改
B[0,0]=
A[0,0]=
在这里完全等效