Well, what I mean is that both torch.autograd and torch.Tensor are objects. As far I understand torch.autograd.data is a torch.tensor
What I expect to happen is that if I modify a torch.autograd class variable and that change is visible for the whole program, i.e is implicit, why torch.tensor variable modifications are not. I would expect the same behavior for both of them, as both are class variables.
In your example if you have a=[[1,2,3,4]] and you pass a[0], i.e. a list object the same holds because the internal object to the list is a class variable that supports implicit modification (as you clearly state before):
a=[[1,2,3]]
def function(a):
        a[0]=2
        return a
function(a[0]) #a now would be a[2,2,3]

I do not see why on torch.autograd the implicit operation is preserved while for a torch.tensor is not.