To the outside it appears at least superficially as if an object was not much more than it's location, rotation and scale values and the datablock handled the rest.
That's obviously not the case and you can only swap datablocks of the same type. Why is that? Why do objects even have a type? How do objects differ from each other when you ignore their datablocks?