@@ -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