I think it depends what you mean by “truly new Tensor” 

If you just want to make sure the same underlying Tensor stays alive. doing auto a = t; does the trick. You can see it as taking another reference from a shared pointer.
If you want a new tensor object (so be able to change metadata, autograd info, etc), you can do auto a = t.alias(); to get it in a differentiable way (gradients will flow back), or auto a = t.detach(); to prevent gradient propagation. Note that this will share data with the original tensor. So changing the content of t inplace will also change a.
If you want a new tensor object and new memory, you should do auto a = t.clone(); to get it in a differentiable way and auto a = t.detach().clone(); to prevent gradients from flowing.