When you do grad_weight.append(grad) python simply appends a reference to grad to the list grad_weight. So each item of grad_weight is the same - every item is a reference to the same grad tensor.
You need make a copy of the data when appending to the list.
grad_weight.append(grad.clone())