You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:07:31