From the documentation:
Bind a  DataLoader  to a  torch.device .

Put the batches of  dl  on  device  after applying an optional list of  tfms .  collate_fn  will replace the one of  dl . All dataloaders of a  DataBunch  are of this type.

I noticed that the new method is just overwriting the kwargs of the DeviceDataLoader object with the ones passed in with new and constructing a new DeviceDataLoader object with it.
def new(self, **kwargs):
        "Create a new copy of `self` with `kwargs` replacing current values."
        new_kwargs = {**self.dl.init_kwargs, **kwargs}
        return DeviceDataLoader(self.dl.__class__(self.dl.dataset, **new_kwargs), self.device, self.tfms,
                                self.collate_fn)


I don’t see why the returned object is not oversampling as expected.