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

为何Python中numpy数组赋值后原变量会被自动修改?

问题解析:为什么两次print的numpy数组结果不一样?

嘿,这个问题其实是numpy数组的引用赋值特性搞的鬼,我来给你一步步理清楚:

首先先还原你的代码和输出:

你的代码

import numpy as np
population= np.random.normal(0,1,5)
individuals=population
print(population)
for i in range(len(individuals)):
    individuals[i]=0
print(population)

你的输出

[-0.1791731 -0.0756427 0.44463943 -0.51173395 0.9121922 ]
[0. 0. 0. 0. 0.]

原因解释

在Python里,对于numpy数组这类可变对象,当你执行individuals = population的时候,并没有复制出一个新的数组,而是让individuals这个变量和population指向了同一个内存地址里的数组对象。这就像两个人共用同一本笔记本,其中一个人把笔记本里的内容改成0,另一个人打开看到的自然也是全0的内容。

解决方法

如果你想让individuals成为一个独立的新数组,和population互不影响,你需要显式地复制数组:

方法1:使用数组的copy()方法

import numpy as np
population= np.random.normal(0,1,5)
individuals=population.copy()  # 这里改成显式复制
print(population)
for i in range(len(individuals)):
    individuals[i]=0
print(population)

方法2:使用np.copy()函数

individuals = np.copy(population)

方法3:使用切片语法(numpy数组的切片会返回新数组)

individuals = population[:]

修改后再运行,你会发现两次print(population)的结果就一致了,修改individuals不会影响到原数组。

内容的提问来源于stack exchange,提问作者Blackscholes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:27:28