Hi,
The difference is that model.to(device) is inplace while tensor.to(device) is not:
Does the sample below helps?
import torch
import copy

# I will use `.double()` instead of `.cuda()` because my local
# machine does not have cuda, but they behave the same way

tensor = torch.zeros(10)
model = torch.nn.Linear(10, 10)

new_val = torch.ones(10)
def your_copy(par):
  par = copy.deepcopy(new_val)
  par = par.double()

print("Your changes are out of place and so not reflected outside")
print("Before your copy on tensor")
print(tensor)
print(tensor.type())

your_copy(tensor)

print("After your copy on tensor")
print(tensor)
print(tensor.type())

print("Models are changed inplace:")
print("Before on module")
print(model.weight.type())

model.double()

print("After on module")
print(model.weight.type())


def my_suggestion(par):
  par.copy_(new_val)
  # No way to change type here inplace

print("With inplace change, you can change value and have it reflected outside")
print("Before my copy")
print(tensor)

my_suggestion(tensor)

print("After my copy")
print(tensor)