Skip to content

Commit 09661d0

Browse files
topper-123SeeminSyed
authored andcommitted
PERF/REF: MultiIndex.copy (pandas-dev#32883)
1 parent a86b138 commit 09661d0

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

pandas/core/indexes/multi.py

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -987,12 +987,38 @@ def _constructor(self):
987987
return MultiIndex.from_tuples
988988

989989
@Appender(Index._shallow_copy.__doc__)
990-
def _shallow_copy(self, values=None, **kwargs):
990+
def _shallow_copy(
991+
self,
992+
values=None,
993+
name=lib.no_default,
994+
levels=None,
995+
codes=None,
996+
dtype=None,
997+
sortorder=None,
998+
names=lib.no_default,
999+
_set_identity: bool = True,
1000+
):
1001+
if names is not lib.no_default and name is not lib.no_default:
1002+
raise TypeError("Can only provide one of `names` and `name`")
1003+
elif names is lib.no_default:
1004+
names = name if name is not lib.no_default else self.names
1005+
9911006
if values is not None:
992-
names = kwargs.pop("names", kwargs.pop("name", self.names))
993-
return MultiIndex.from_tuples(values, names=names, **kwargs)
1007+
assert levels is None and codes is None and dtype is None
1008+
return MultiIndex.from_tuples(values, sortorder=sortorder, names=names)
1009+
1010+
levels = levels if levels is not None else self.levels
1011+
codes = codes if codes is not None else self.codes
9941012

995-
result = self.copy(**kwargs)
1013+
result = MultiIndex(
1014+
levels=levels,
1015+
codes=codes,
1016+
dtype=dtype,
1017+
sortorder=sortorder,
1018+
names=names,
1019+
verify_integrity=False,
1020+
_set_identity=_set_identity,
1021+
)
9961022
result._cache = self._cache.copy()
9971023
result._cache.pop("levels", None) # GH32669
9981024
return result
@@ -1052,17 +1078,13 @@ def copy(
10521078
levels = deepcopy(self.levels)
10531079
if codes is None:
10541080
codes = deepcopy(self.codes)
1055-
else:
1056-
if levels is None:
1057-
levels = self.levels
1058-
if codes is None:
1059-
codes = self.codes
1060-
return MultiIndex(
1081+
1082+
return self._shallow_copy(
10611083
levels=levels,
10621084
codes=codes,
10631085
names=names,
1086+
dtype=dtype,
10641087
sortorder=self.sortorder,
1065-
verify_integrity=False,
10661088
_set_identity=_set_identity,
10671089
)
10681090

0 commit comments

Comments
 (0)