diff --git a/pandas/core/generic.py b/pandas/core/generic.py index c893e9ce3d9a9..23eb66abb8561 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -4934,7 +4934,7 @@ def sort_index( if inplace: result = self else: - result = self.copy() + result = self.copy(deep=None) if ignore_index: result.index = default_index(len(self)) diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index 878f1d8089d33..dc0bf01c84c74 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -405,6 +405,23 @@ def test_reindex_like(using_copy_on_write): tm.assert_frame_equal(df, df_orig) +def test_sort_index(using_copy_on_write): + # GH 49473 + ser = Series([1, 2, 3]) + ser_orig = ser.copy() + ser2 = ser.sort_index() + + if using_copy_on_write: + assert np.shares_memory(ser.values, ser2.values) + else: + assert not np.shares_memory(ser.values, ser2.values) + + # mutating ser triggers a copy-on-write for the column / block + ser2.iloc[0] = 0 + assert not np.shares_memory(ser2.values, ser.values) + tm.assert_series_equal(ser, ser_orig) + + def test_reorder_levels(using_copy_on_write): index = MultiIndex.from_tuples( [(1, 1), (1, 2), (2, 1), (2, 2)], names=["one", "two"]