python中赋值都是引用形式的,不要随便改动赋值后值的值,会影响原来变量的取值
import scanpy as sc import numpy as np aa=np.array([[1,2,3],[2,3,3],[3,2,1]]) adata=sc.AnnData(aa) print(adata.X) bb=adata.X print(bb) bb[1]=[100,200,300]## 千万不要乱赋值,否则会修改原来的值 print(bb) print(adata.X)
结果如下
可以看到adata.X里面的值会自动修改,如果不想修改,就使用copy()
import scanpy as sc import numpy as np aa=np.array([[1,2,3],[2,3,3],[3,2,1]]) adata=sc.AnnData(aa) print(adata.X) bb=adata.X.copy() print(bb) bb[1]=[100,200,300] print(bb) print(adata.X)
结果如下
但是,这里需要注意的一点是,这种赋值对adata.raw是不起作用的
import scanpy as sc
import numpy as np
aa=np.array([[1,2,3],[2,3,3],[3,2,1]])
adata=sc.AnnData(aa)
adata.raw=adata ## 但是需要注意的是
sc.pp.scale(adata)
print(adata.X)
print("========")
print(adata.raw.X)
结果如下
可以看到,这里的adata.raw.X并没有因为adata.X的改变而改变



