.backward() will just populate the .grad fields of the parameters. These gradients are not saved in the state dicts and so nothing will change there.
after opt.step() the values of the parameters will be changed inplace. So if you want to see the difference before and after, you need to clone the original Tensor.
optimizer.state_dict() is dependant on the optimizer itself. It will contain whatever is needed for this optimizer to continue working as if it was not stopped (saving things like momentum terms or statistics).