ENH: Add lazy copy for swapaxes no op
- [ ] xref #49473 (Replace xxxx with the GitHub issue number)
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Not totally sure what to do in the other copy case. This can return views in some cases, but copy is performed on the underlying array > Not totally sure what to do in the other copy case. This can return views in some cases, but copy is performed on the underlying array

What I think we _ideally_ should do is in case that ``self.values`` is a view on the underlying data (i.e. only if we have a single block I assume) and so the swapped values is also a view of the original data, in that case we should construct a new BlockManager with a ref to the original manager's block. 

This can be done here using some internal APIs, but to do this properly, it might be easier to have this as a method on the Manager. 

 I've used ndarray_to_mgr for now, that's basically what we need here. > we will need to same logic in DataFrame.transpose() as well

Another thought here: now that we are limited to max 2 dimensions in NDFrame, isn't swapaxes just the same as transpose? (for the case i and j are not the same) We could then maybe also consolidate those implementations (eg swapaxes calling transpose when appropriate)

 > Another thought here: now that we are limited to max 2 dimensions in NDFrame, isn't swapaxes just the same as transpose? (for the case i and j are not the same) We could then maybe also consolidate those implementations (eg swapaxes calling transpose when appropriate)

Sounds good! But would take a look as follow up, the implementations are quite different and want to understand how this would impact stuff. I think transpose is better, as it keeps dtypes more often if possible Merging for now, happy to address comments in a follow up if there are any