From a51c5a3f0b69a073721ea0de8220cad87a1fb49b Mon Sep 17 00:00:00 2001 From: Patrick Hoefler <61934744+phofl@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:56:40 +0100 Subject: [PATCH] Backport PR #52054: PERF: Improve performance with copy=True and different dtype --- pandas/core/internals/construction.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pandas/core/internals/construction.py b/pandas/core/internals/construction.py index 83ac9c40df680..ac36cb4aa5960 100644 --- a/pandas/core/internals/construction.py +++ b/pandas/core/internals/construction.py @@ -22,6 +22,7 @@ npt, ) +from pandas.core.dtypes.astype import astype_is_view from pandas.core.dtypes.cast import ( construct_1d_arraylike_from_scalar, dict_compat, @@ -291,7 +292,12 @@ def ndarray_to_mgr( elif isinstance(values, (np.ndarray, ExtensionArray, ABCSeries, Index)): # drop subclass info - values = np.array(values, copy=copy_on_sanitize) + _copy = ( + copy_on_sanitize + if (dtype is None or astype_is_view(values.dtype, dtype)) + else False + ) + values = np.array(values, copy=_copy) values = _ensure_2d(values) else: