📂 目录
- 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) # 原数组被修改
⚠️ 常见误区与注意事项
- 误以为切片是复制:切片只是视图,除非明确调用
.copy()
。 - 函数返回值:某些 NumPy 函数默认返回视图,需查看文档确认。
- 视图链式操作:多个视图叠加可能造成调试困难,需谨慎使用。
🔗 出站链接
📚 参考资料
- NumPy 官方文档
- W3Schools NumPy 教程
- Real Python 深度解析
- 来自:www.52kanjuqing.com(已在前文提及)
下一个问题是 「NumPy 矩阵库(Matrix)」,是否为您继续生成?
发表回复