Usually you would implement a dataset with lazy loading, so that the actual data samples are loading in each call into __getitem__, and thus creating multiple datasets would be cheap (as no data would be loaded in the __init__).
Since CIFAR10 is considered small (50000 samples in the train set * 3 channels * 32 height * 32 width ~= 150MB) it’s loaded directly in the __init__.
If you are concerned about wasting these 150MB, you could derive a custom dataset using CIFAR10 as the parent class and split the datasets internally.