为何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
相关产品推荐
相关产品推荐

