API / CoW: shallow copy of DataFrame/Series (.copy(deep=False)) also returns shallow copy of the index/columns #53722
+60
−23
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Broken off a subset of #53699, only focusing on the behaviour of
df.copy(deep=False)
(i.e. a "shallow copy"). And address thecopy(deep=False)
part of #53721.Currently, a shallow copy of a DataFrame/Series only creates a new DataFrame/Series object, but still shares the same data (with tracking references, to ensure copy-on-write) and Index objects.
Because Index objects have some mutable aspects (not their values, but for example there
name
), that means that sharing an identical object in the resulting shallow copy can propagate mutations to those mutable parts of the index.See #53721 for a longer description of the context.
This PR just updates the DataFrame/Series
copy()
method to also take a shallow copy of the index/columns Index object, in case ofdeep=False
.And based on the tests I had to update to get this passing, it illustrates some of the consequential changes in other places because of changing the shallow copy.
doc/source/whatsnew/vX.X.X.rst
file if fixing a bug or adding a new feature.