Python中使用random.choice(Training_Data)导致内存激增的原因咨询
内存持续暴涨的原因分析
问题核心出在numpy数组的特性和代码里的错误逻辑上,拆解来看:
- numpy数组是固定大小的,每次调用
np.delete(Training_Data, count, 0)时,并不会直接修改原数组,而是创建一个全新的数组,再把Training_Data变量指向这个新数组。旧数组如果还有未释放的引用,就不会被Python垃圾回收机制清理,会一直占用内存。 - 内层循环
for lines in Training_Data在遍历数组的同时修改了Training_Data的指向,此时迭代器还持有对旧数组的引用,导致旧数组无法被回收。循环500次就会堆积500个旧数组,内存自然急剧增长。
而换成Value = random.choice(Data_Matrix)时内存问题消失,是因为你的count索引计算错误:
你在内层循环里让count从0开始,每遍历一个元素就+1,找到匹配元素时用count作为索引删除——但numpy数组索引从0开始,这里的count其实是当前元素的位置+1,导致你每次删除的是下一个元素,而非匹配的那个。这会让Training_Data里的目标元素根本没被正确删除,当从Data_Matrix选元素时,内层循环大概率找不到匹配项,也就不会执行np.delete,自然不会不断创建新数组堆积内存。
总结核心原因:
np.delete每次创建新数组,旧数组因迭代器引用无法回收,内存持续堆积- 索引计算错误导致删除逻辑失效,进一步加剧了内存浪费
内容的提问来源于stack exchange,提问作者CanadianBeaver
相关产品推荐
相关产品推荐

