API: honor copy=True when passing dict to DataFrame
- [x] closes #32960
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

xref #34872 cc @TomAugspurger used the test_dict_nocopy you wrote but it ended up pretty mangled
I am leary of this consolidation (or rather non-consolidation). it is going to be quite fragile. why is consolidation tied to the dict copy at all? > I am leary of this consolidation (or rather non-consolidation). it is going to be quite fragile. why is consolidation tied to the dict copy at all?


@TomAugspurger can you weigh in on why this is worthwhile I think just having the `copy` keyword apply to all `data` inputs, rather than just ndarrays. ok i think fine to merge. any comments @pandas-dev/pandas-core  @jbrockmendel conflict if you can merge master rebased + green lgtm. unless comment by @pandas-dev/pandas-core will merge tom. @jbrockmendel can you rebase. i think this is ok to merge. rebased + green Sorry for the late reaction here (I looked at it earlier but at that point I thought it was just about honoring the keyword, not changing the default).

To be clear, I am fully on board with the code changes to honor the keyword also for dict input (it's very useful to be able to create a DataFrame from a dict of arrays without making a copy). But why can't we keep the current default of copying (for dict input), and then people can now actually use `copy=False` to avoid a copy? (in practice that means the default would become `copy=None`, so we can know the user passed ``copy=False`` themselves)

That allows the behaviour we want to make possible, but without being a breaking change. 
 > That allows the behaviour we want to make possible, but without being a breaking change.

works for me.  id also be OK with calling this a bugfix as its clearly wrong behavior, but it has been there for a while.  either way.  cc @TomAugspurger @jreback? Yeah, if possible (and IIRC it is possible), we'd want to have `pd.DataFrame(data)` not change behavior for dict or ndarray. But `pd.DataFrame(data, copy=False)` would change for dict `data` (that's the bug fix)`. Changing the default breaks a handful of tests, so ive got some troubleshooting to do.

I'm not wild about de-facto having "copy=False is the default, except for if data is a dict" @jbrockmendel can you indicate when this is ready for a new look? (you pushed a commit with "requested edits", but it's not clear whether it's ready or not) updated with a much nicer handling of copy in `__init__` @jbrockmendel can you do a final merge of master here to be sure it's all passing with latest master?

@jreback all good for you? (your "approve" is from before the behaviour changed to preserve the copy=False behaviour for dicts) hmm, this looks to be failing a bunch of things thanks @jbrockmendel this has been a long road, and @TomAugspurger for the original version.