torch tensors are actually the data.
variables wrap tensors, and construct a chain of operations between teh tensors, so taht the gradietns can flow back.
so, eg you create variable a, and then add 1 to it to get b. Theres now a link stored between a and b, in the creator property of b. Then when you call .backward() on b, the gradient backpropagates, via the function in b.creator into a.
tensors dont have the concept of gradients, creator etc. they purely store data, and handle operations on that data, like adding, multiplying nad stuff.