为什么a的ID没有变?
Why hasn't a's ID changed?
a = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
b = torch.tensor([5.0, 5.0, 5.0])
los = sum(a*b)
los.backward()
print(id(a.grad))
a.grad = torch.tensor([1., 2., 3.])
print(id(a.grad))
输出:
2792503915000
2792503915000
为什么 a.grad
的 ID 没有改变?
Python 的 id()
只是 returns 对象的唯一编号。生命周期不重叠的对象ID可以相同;也就是说,当一个对象被销毁,然后创建一个新对象时,新对象可以与上一个对象具有相同的 ID。 Python 对象 ID 通常与 C 中的内存地址进行比较,并且(显然)在某些 python 实现中,它们 只是内存地址。
例如,考虑以下片段:
class a:
pass
my_a = a()
print(id(my_a))
my_a = a()
print(id(my_a))
my_a = a()
print(id(my_a))
对于我的特定 python 实现,示例输出是:
139647922983888
139647922986768
139647922983888
第三次重复第一个ID;这是 id()
api.
允许的
a = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
b = torch.tensor([5.0, 5.0, 5.0])
los = sum(a*b)
los.backward()
print(id(a.grad))
a.grad = torch.tensor([1., 2., 3.])
print(id(a.grad))
输出:
2792503915000
2792503915000
为什么 a.grad
的 ID 没有改变?
Python 的 id()
只是 returns 对象的唯一编号。生命周期不重叠的对象ID可以相同;也就是说,当一个对象被销毁,然后创建一个新对象时,新对象可以与上一个对象具有相同的 ID。 Python 对象 ID 通常与 C 中的内存地址进行比较,并且(显然)在某些 python 实现中,它们 只是内存地址。
例如,考虑以下片段:
class a:
pass
my_a = a()
print(id(my_a))
my_a = a()
print(id(my_a))
my_a = a()
print(id(my_a))
对于我的特定 python 实现,示例输出是:
139647922983888
139647922986768
139647922983888
第三次重复第一个ID;这是 id()
api.