Skip to content

Commit dc01af3

Browse files
committed
PERF/REF: MultiIndex.copy
1 parent 139228b commit dc01af3

File tree

1 file changed

+27
-12
lines changed

1 file changed

+27
-12
lines changed

pandas/core/indexes/multi.py

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -987,12 +987,32 @@ 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=None,
994+
levels=None,
995+
codes=None,
996+
sortorder=None,
997+
names=None,
998+
_set_identity: bool = True,
999+
):
1000+
names = self._validate_names(name=name, names=names)
1001+
9911002
if values is not None:
992-
names = kwargs.pop("names", kwargs.pop("name", self.names))
993-
return MultiIndex.from_tuples(values, names=names, **kwargs)
1003+
assert levels is None and codes is None
1004+
return MultiIndex.from_tuples(values, sortorder=sortorder, names=names)
9941005

995-
result = self.copy(**kwargs)
1006+
levels = levels if levels is not None else self._levels
1007+
codes = codes if codes is not None else self._codes
1008+
1009+
result = MultiIndex(
1010+
levels=levels,
1011+
codes=codes,
1012+
sortorder=sortorder,
1013+
names=names,
1014+
_set_identity=_set_identity,
1015+
)
9961016
result._cache = self._cache.copy()
9971017
result._cache.pop("levels", None) # GH32669
9981018
return result
@@ -1044,25 +1064,20 @@ def copy(
10441064
``deep``, but if ``deep`` is passed it will attempt to deepcopy.
10451065
This could be potentially expensive on large MultiIndex objects.
10461066
"""
1047-
names = self._validate_names(name=name, names=names, deep=deep)
10481067
if deep:
10491068
from copy import deepcopy
10501069

10511070
if levels is None:
10521071
levels = deepcopy(self.levels)
10531072
if codes is None:
10541073
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(
1074+
1075+
return self._shallow_copy(
10611076
levels=levels,
1077+
name=name,
10621078
codes=codes,
10631079
names=names,
10641080
sortorder=self.sortorder,
1065-
verify_integrity=False,
10661081
_set_identity=_set_identity,
10671082
)
10681083

0 commit comments

Comments
 (0)