diff --git a/pandas/core/generic.py b/pandas/core/generic.py index c893e9ce3d9a9..7e8196c9b27f3 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -10099,7 +10099,7 @@ def truncate( @final @doc(klass=_shared_doc_kwargs["klass"]) def tz_convert( - self: NDFrameT, tz, axis: Axis = 0, level=None, copy: bool_t = True + self: NDFrameT, tz, axis: Axis = 0, level=None, copy: bool_t | None = None ) -> NDFrameT: """ Convert tz-aware axis to target time zone. @@ -10181,7 +10181,7 @@ def tz_localize( tz, axis: Axis = 0, level=None, - copy: bool_t = True, + copy: bool_t | None = None, ambiguous: TimeAmbiguous = "raise", nonexistent: TimeNonexistent = "raise", ) -> NDFrameT: diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index 878f1d8089d33..d819e806516ad 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -5,6 +5,7 @@ DataFrame, MultiIndex, Series, + date_range, ) import pandas._testing as tm from pandas.tests.copy_view.util import get_array @@ -441,6 +442,28 @@ def test_frame_set_axis(using_copy_on_write): tm.assert_frame_equal(df, df_orig) +@pytest.mark.parametrize( + "func, tz", [("tz_convert", "Europe/Berlin"), ("tz_localize", None)] +) +def test_tz_convert_localize(using_copy_on_write, func, tz): + # GH 49473 + ser = Series( + [1, 2], index=date_range(start="2014-08-01 09:00", freq="H", periods=2, tz=tz) + ) + ser_orig = ser.copy() + ser2 = getattr(ser, func)("US/Central") + + 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_series_set_axis(using_copy_on_write): # GH 49473 ser = Series([1, 2, 3])