在torch中,为什么我连续使用id(tensor[x][y])会得到两个不同的结果?

1 投票
1 回答
44 浏览
提问于 2025-04-14 17:26
x=torch.rand(3,3)
id(x[0][0])
1186163119824
id(x[0][0])
1186163118464
id(x[0,0])
1186163118464
id(x[0,0])
1186163118464

我了解Python中列表的存储结构,也明白浅拷贝和深拷贝的概念,但我对PyTorch中的张量不太熟悉。请问id函数有问题吗?

1 个回答

3

x[<whatever>] 这个操作会创建一个新的张量,你可以通过下面的方式来验证这一点:

>>> import torch
>>> x=torch.rand(3,3)
>>> type(x[0])
<class 'torch.Tensor'>

关于你用 id 进行测试的部分,结果可能不太明确。不过,查看一下id函数的文档可能会有帮助。

id(object)
返回一个对象的“身份”。这个身份是一个整数,保证在对象的生命周期内是唯一且不变的。两个生命周期不重叠的对象可能会有相同的 id() 值。

CPython 实现细节:这是对象在内存中的地址。

触发一个审计事件 builtins.id,参数为 id。

简单来说,每次使用 [] 操作符时,你都会创建新的对象,因此像 x[0][0] 这样的两个语句的结果不一定会有相同的 id(也就是说,在 CPython 中,它们可能不在同一个内存地址上)。

撰写回答