Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pandas/core/frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -5855,7 +5855,8 @@ def set_index(
if inplace:
frame = self
else:
frame = self.copy()
# GH 49473 Use "lazy copy" with Copy-on-Write
frame = self.copy(deep=None)

arrays = []
names: list[Hashable] = []
Expand Down
17 changes: 17 additions & 0 deletions pandas/tests/copy_view/test_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,20 @@ def test_chained_methods(request, method, idx, using_copy_on_write):
df.iloc[0, 0] = 0
if not df2_is_view:
tm.assert_frame_equal(df2.iloc[:, idx:], df_orig)


def test_set_index(using_copy_on_write):
# GH 49473
df = DataFrame(
{
"month": [1, 4, 7, 10],
"year": [2012, 2014, 2013, 2014],
"sale": [55, 40, 84, 31],
}
)
df2 = df.set_index("month")

if using_copy_on_write:
assert np.shares_memory(get_array(df2, "year"), get_array(df, "year"))
else:
assert not np.shares_memory(get_array(df2, "year"), get_array(df, "year"))