1. 先搞懂三个概念新手必看① 深拷贝Deep Copy完全复制一份新数据新、旧完全独立修改一个另一个不变占双倍内存② 浅拷贝Shallow Copy只复制引用/索引不复制数据但不会共享内存只是指向同一个对象改原数据浅拷贝会变③ 共享内存Shared Memory两个变量指向同一块内存地址完全是同一个数据只是名字不同改一个 改两个不占额外内存最高效2. 你的情况data_tensor↔data_numpy它们是共享内存tensortorch.tensor([1,2,3])numpy_arrtensor.numpy()# 共享内存tensor[0]999# 修改张量print(numpy_arr)# 数组也变成 [999,2,3]原因PyTorch 为了效率从 tensor → numpy 时不复制数据直接共用同一块内存。3. 那它到底属于哪一种操作关系修改一个影响另一个属于tensor.numpy()同一块内存✅强烈影响共享内存深拷贝完全独立❌ 不影响深拷贝浅拷贝引用复制✅ 影响浅拷贝官方定义tensor ↔ numpy 不是拷贝是共享内存零拷贝比浅拷贝更彻底、更高效。4. 如果你不想共享内存想独立加一个.copy()变成深拷贝# 深拷贝完全独立互不影响numpy_arrtensor.numpy().copy()最终总结必背tensor.numpy() 既不是深拷贝也不是浅拷贝它是共享内存同一块数据两个名字改一个两个一起变想独立 → 加.copy()变成深拷贝你现在是不是彻底分清了
共享内存(零拷贝)** —— 这是 PyTorch 和 NumPy 之间最高效的特殊机制!
发布时间:2026/5/23 23:38:08
1. 先搞懂三个概念新手必看① 深拷贝Deep Copy完全复制一份新数据新、旧完全独立修改一个另一个不变占双倍内存② 浅拷贝Shallow Copy只复制引用/索引不复制数据但不会共享内存只是指向同一个对象改原数据浅拷贝会变③ 共享内存Shared Memory两个变量指向同一块内存地址完全是同一个数据只是名字不同改一个 改两个不占额外内存最高效2. 你的情况data_tensor↔data_numpy它们是共享内存tensortorch.tensor([1,2,3])numpy_arrtensor.numpy()# 共享内存tensor[0]999# 修改张量print(numpy_arr)# 数组也变成 [999,2,3]原因PyTorch 为了效率从 tensor → numpy 时不复制数据直接共用同一块内存。3. 那它到底属于哪一种操作关系修改一个影响另一个属于tensor.numpy()同一块内存✅强烈影响共享内存深拷贝完全独立❌ 不影响深拷贝浅拷贝引用复制✅ 影响浅拷贝官方定义tensor ↔ numpy 不是拷贝是共享内存零拷贝比浅拷贝更彻底、更高效。4. 如果你不想共享内存想独立加一个.copy()变成深拷贝# 深拷贝完全独立互不影响numpy_arrtensor.numpy().copy()最终总结必背tensor.numpy() 既不是深拷贝也不是浅拷贝它是共享内存同一块数据两个名字改一个两个一起变想独立 → 加.copy()变成深拷贝你现在是不是彻底分清了