copy is a shallow copy, i.e. it’s not copied recursively. That’s what deepcopy is for, as I’ve mentioned above. Your x is a Dict, so regular copy creates a distinct Dict instance, but the DataFrame inside is still the same object.
I don’t know what row is, so I can only guess at what’s going wrong. If it still doesn’t work, please provide a MWE to make it easier to debug your problem.