📂 目录

  • NumPy 中的副本与视图的区别
  • 使用 copy() 创建副本
  • 使用切片或 view() 创建视图
  • 浅拷贝 vs 深拷贝
  • 常见误区与注意事项
  • 出站链接
  • 参考资料

🧠 NumPy 中的副本与视图的区别

在 NumPy 中,理解 副本(Copy)视图(View) 的区别至关重要,因为它们直接影响内存的使用和数据修改的行为。

类型是否共享数据是否占用新内存数据修改是否影响原数组
副本
视图

🧭 使用 copy() 创建副本

copy() 会创建一个全新的数组对象,其数据与原始数组完全独立。

import numpy as np

a = np.array([1, 2, 3])
b = a.copy()

b[0] = 100
print("原数组 a:", a)  # [1 2 3]
print("副本 b:", b)    # [100 2 3]


👓 使用切片或 view() 创建视图

切片操作默认返回的是视图。视图共享原始数组的数据缓冲区。

a = np.array([1, 2, 3])
v = a[1:]  # 视图

v[0] = 200
print("原数组 a:", a)  # [1 200 3]
print("视图 v:", v)    # [200 3]

使用 a.view() 也可以显式地创建一个视图对象:

a = np.array([4, 5, 6])
v = a.view()
v[1] = 500
print(a)  # [4 500 6]


🔍 浅拷贝 vs 深拷贝

  • 浅拷贝(View):复制的是引用,数据共享。
  • 深拷贝(Copy):复制的是值,数据完全独立。

对二维数组尤其要注意:

a = np.array([[1, 2], [3, 4]])
v = a[:, :1]  # 仍然是视图
v[0, 0] = 99
print(a)  # 原数组被修改


⚠️ 常见误区与注意事项

  1. 误以为切片是复制:切片只是视图,除非明确调用 .copy()
  2. 函数返回值:某些 NumPy 函数默认返回视图,需查看文档确认。
  3. 视图链式操作:多个视图叠加可能造成调试困难,需谨慎使用。

🔗 出站链接


📚 参考资料


下一个问题是 「NumPy 矩阵库(Matrix)」,是否为您继续生成?