Python中numpy切片赋值引发内存变量值意外变更问题求助
解决Numpy数组切片赋值后变量值意外改变的问题
嘿,刚接触Python第一天就碰到这个numpy的小坑啦,别担心,这是新手学numpy时非常常见的问题~
问题原因
你遇到的核心问题是:Numpy数组的切片返回的是原数组的「视图」,不是独立的副本。
简单来说,memory_1 = U[k:n,k] 这句代码并没有把U[k:n,k]里的数据复制一份存到memory_1里,而是让memory_1变成了指向原数组U对应区域的“引用”。所以当你后续修改U[k:n,k]和U[k:n,index_max]时,memory_1和memory_2因为指向的是原数组的同一块内存区域,自然会跟着改变。
解决方法
只需要给切片加上.copy()方法,强制创建独立的数据副本就行,修改后的代码如下:
import numpy as np # 假设你已经导入了numpy库 U_abs = abs(U) index_max = np.argmax(U_abs[k:n,k]) # 用.copy()创建独立副本,而不是引用原数组的视图 memory_1 = U[k:n,k].copy() memory_2 = U[k:n,index_max].copy() print(memory_1) print(memory_2) U[k:n,k] = memory_2 U[k:n,index_max] = memory_1 print(memory_1) print(memory_2)
另外,你也可以用np.array()来创建副本,效果是一样的:
memory_1 = np.array(U[k:n,k]) memory_2 = np.array(U[k:n,index_max])
补充说明
Numpy这么设计其实是为了高效处理大数据——如果每次切片都自动复制数据,处理大型数组时会非常浪费内存和时间。但这个特性确实容易让刚接触的新手困惑,你第一天就能碰到这个问题,说明已经在动手实践有难度的操作啦,很棒!
内容的提问来源于stack exchange,提问作者Girigio
相关产品推荐
相关产品推荐

