当a、b均为ndarray时,a=b与a=np.array(b)的差异解析
两种NumPy数组赋值方式的差异解释
案例1
import numpy as np a = np.array([1,2]) def add(x, num): x[0] += num x[1] += num return x b = np.array(a) c = a b = add(b, 1) c = np.vstack((c,b)) print(c)
运行结果为:[[1 2] [2 3]]
案例2
import numpy as np a = np.array([1,2]) def add(x, num): x[0] += num x[1] += num return x b = a c = a b = add(b, 1) c = np.vstack((c,b)) print(c)
运行结果为:[[2 3] [2 3]]
两者仅在数组赋值行的写法上有区别:分别使用b = np.array(a)和b = a,核心差异如下:
b = np.array(a):创建独立的新数组
这种写法会在内存中生成一个全新的NumPy数组对象,新数组的初始数据和a完全一致,但两者拥有独立的内存空间。后续对b的任何修改(比如add函数中修改数组元素)都只会作用于这个新数组,不会影响原数组a。所以案例1中,c指向的原数组a保持初始值[1,2],修改后的b为[2,3],最终拼接结果是两个不同的数组。b = a:引用赋值,共享同一个数组
这种写法并没有创建新数组,只是让变量b和a指向内存中同一个数组对象。此时a、b、c三个变量都对应同一个数组,调用add(b,1)修改数组元素时,本质是修改了这个共享的数组内容,a和c的值也会同步变化。所以案例2中,c和b最终指向的都是修改后的数组[2,3],拼接后得到两个相同的数组。
内容的提问来源于stack exchange,提问作者IRobo
相关产品推荐
相关产品推荐

