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

当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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:35:10