Skip to content

Commit 2a082fd

Browse files
authored
BUG: preserve _id in MultiIndex.copy(deep=False) (#47900)
1 parent 0b6d120 commit 2a082fd

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

pandas/core/indexes/multi.py

+5
Original file line numberDiff line numberDiff line change
@@ -1190,20 +1190,23 @@ def copy(
11901190
This could be potentially expensive on large MultiIndex objects.
11911191
"""
11921192
names = self._validate_names(name=name, names=names, deep=deep)
1193+
keep_id = not deep
11931194
if levels is not None:
11941195
warnings.warn(
11951196
"parameter levels is deprecated and will be removed in a future "
11961197
"version. Use the set_levels method instead.",
11971198
FutureWarning,
11981199
stacklevel=find_stack_level(),
11991200
)
1201+
keep_id = False
12001202
if codes is not None:
12011203
warnings.warn(
12021204
"parameter codes is deprecated and will be removed in a future "
12031205
"version. Use the set_codes method instead.",
12041206
FutureWarning,
12051207
stacklevel=find_stack_level(),
12061208
)
1209+
keep_id = False
12071210

12081211
if deep:
12091212
from copy import deepcopy
@@ -1225,6 +1228,8 @@ def copy(
12251228
)
12261229
new_index._cache = self._cache.copy()
12271230
new_index._cache.pop("levels", None) # GH32669
1231+
if keep_id:
1232+
new_index._id = self._id
12281233

12291234
if dtype:
12301235
warnings.warn(

pandas/tests/indexes/multi/test_copy.py

+12
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,15 @@ def test_copy_deprecated_parameters(deep, param_name, param_value):
104104
idx_copy = idx.copy(deep=deep, **{param_name: param_value})
105105

106106
assert [list(i) for i in getattr(idx_copy, param_name)] == param_value
107+
108+
109+
def test_copy_deep_false_retains_id():
110+
# GH#47878
111+
idx = MultiIndex(
112+
levels=[["foo", "bar"], ["fizz", "buzz"]],
113+
codes=[[0, 0, 0, 1], [0, 0, 1, 1]],
114+
names=["first", "second"],
115+
)
116+
117+
res = idx.copy(deep=False)
118+
assert res._id is idx._id

0 commit comments

Comments
 (0)