As I depend on "base" which in turn should load util in, you might have a mod loaded that deliberately wipes util.
No it doesn't.
You have to explicitly load util to have deepcopy, otherwise it's not there.
Also my mod (dimension-warp) explicitly load util and use it, so clearly I don't wipe it...
If you want to test it by yourself, just create a vanilla game with your mod only and type:
/c local surface = game.create_surface('test_surface')
surface.name = "new_name"
and you'll have the same exact error (minus the stack from dimension-warp)
https://imgur.com/a/OroXsax