在torch中,为什么我连续使用id(tensor[x][y])会得到两个不同的结果?
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 中,它们可能不在同一个内存地址上)。