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

NumPy中array_2=array_1与array_2=array_1.view()的区别是什么

NumPy两种赋值方式的区别

核心是两种赋值的底层逻辑完全不同:

  • 直接赋值 array_2 = array_1:属于对象引用绑定,两个变量指向完全相同的数组对象,共享所有属性和数据存储空间。
  • 视图赋值 array_2 = array_1.view():会创建全新的数组对象,但新数组和原数组共享底层的数据缓冲区,数组自身的属性(维度、数据类型等)独立。

实操示例

场景1:直接赋值的效果

import numpy as np

# 初始化原数组
array_1 = np.array([1,2,3,4,5])
# 直接赋值
array_2 = array_1

print(f"修改前array_1: {array_1}")
print(f"修改前array_2: {array_2}")
print(f"是否为同一个对象: {array_2 is array_1}")
print(f"是否共享内存数据: {np.shares_memory(array_1, array_2)}")

# 修改array_2的元素值
array_2[0] = 100
print(f"\n修改array_2元素后array_1: {array_1}")
print(f"修改array_2元素后array_2: {array_2}")

# 修改array_2的维度
array_2.shape = (5,1)
print(f"\n修改array_2维度后array_1的shape: {array_1.shape}")
print(f"修改array_2维度后array_2的shape: {array_2.shape}")

运行输出结果:

  • 修改前array_1: [1 2 3 4 5]
  • 修改前array_2: [1 2 3 4 5]
  • 是否为同一个对象: True
  • 是否共享内存数据: True
  • 修改array_2元素后array_1: [100 2 3 4 5]
  • 修改array_2元素后array_2: [100 2 3 4 5]
  • 修改array_2维度后array_1的shape: (5, 1)
  • 修改array_2维度后array_2的shape: (5, 1)
    可见直接赋值场景下,修改array_2的任意内容和属性都会同步影响原数组array_1。

场景2:view()创建视图的效果

import numpy as np

# 初始化原数组
array_1 = np.array([1,2,3,4,5])
# 创建视图
array_2 = array_1.view()

print(f"修改前array_1: {array_1}")
print(f"修改前array_2: {array_2}")
print(f"是否为同一个对象: {array_2 is array_1}")
print(f"是否共享内存数据: {np.shares_memory(array_1, array_2)}")

# 修改array_2的元素值
array_2[0] = 100
print(f"\n修改array_2元素后array_1: {array_1}")
print(f"修改array_2元素后array_2: {array_2}")

# 修改array_2的维度
array_2.shape = (5,1)
print(f"\n修改array_2维度后array_1的shape: {array_1.shape}")
print(f"修改array_2维度后array_2的shape: {array_2.shape}")

运行输出结果:

  • 修改前array_1: [1 2 3 4 5]
  • 修改前array_2: [1 2 3 4 5]
  • 是否为同一个对象: False
  • 是否共享内存数据: True
  • 修改array_2元素后array_1: [100 2 3 4 5]
  • 修改array_2元素后array_2: [100 2 3 4 5]
  • 修改array_2维度后array_1的shape: (5,)
  • 修改array_2维度后array_2的shape: (5, 1)
    可见视图赋值场景下,修改array_2的元素值会同步影响原数组,但修改array_2自身的属性不会对原数组产生任何影响。

核心区别汇总

赋值方式是否为同一数组对象共享底层数据修改元素影响原数组修改数组属性影响原数组
array_2 = array_1是是是是
array_2 = array_1.view()否是是否

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:24:04