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

为何使用aray +=1与aray=aray+1时PyTorch Tensor的变化不同?

import torch
import numpy as np

aray = np.arange(1, 11)
tensor = torch.from_numpy(aray)
print(f"aray: {aray}, \ntensor: {tensor}\n\n\n")

aray = 1 + aray
print(f"aray + 1: {aray}, \ntensor: {tensor}")

问题

我在执行aray += 1操作时,发现关联的PyTorch Tensor变量同步改变,但执行aray = aray + 1时Tensor无变化,请问原因是什么?

原因解析
  • 核心前提:torch.from_numpy()创建的Tensor会和原NumPy数组共享内存空间,两者指向同一块物理内存,内存里的数据变化会被双方同时感知。
  • 两种操作的本质差异:
    • aray += 1是原地修改操作:它直接在原数组占用的内存空间里修改数值,没有创建新的数组对象。因为Tensor和原数组共享内存,所以Tensor会同步显示修改后的值。
    • aray = aray + 1是新对象赋值操作:aray + 1会生成一个全新的NumPy数组,之后把这个新数组的引用赋值给变量aray。此时原来的数组内存完全没被改动,而Tensor依然指向原来的那块内存,所以Tensor的值不会发生变化。

可以通过打印内存地址验证这个逻辑:

import torch
import numpy as np

aray = np.arange(1, 11)
print(f"原aray内存地址: {id(aray)}")
tensor = torch.from_numpy(aray)

aray += 1
print(f"aray +=1后地址: {id(aray)}")  # 地址和原地址一致,还是同一个对象

aray = aray + 1
print(f"aray = aray+1后地址: {id(aray)}")  # 地址改变,是新创建的对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:43:24