Skip to content

Commit 5daffa8

Browse files
committed
iloc and loc return new object when slice is a tuple
1 parent 91344b9 commit 5daffa8

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

pandas/core/indexing.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ def _getitem_tuple(self, tup):
845845
return self._multi_take(tup)
846846

847847
# no shortcut needed
848-
retval = self.obj
848+
retval = self.obj.copy()
849849
for i, key in enumerate(tup):
850850
if i >= self.obj.ndim:
851851
raise IndexingError('Too many indexers')
@@ -854,7 +854,6 @@ def _getitem_tuple(self, tup):
854854
continue
855855

856856
retval = getattr(retval, self.name)._getitem_axis(key, axis=i)
857-
858857
return retval
859858

860859
def _multi_take_opportunity(self, tup):
@@ -1665,7 +1664,7 @@ def _getitem_tuple(self, tup):
16651664
except:
16661665
pass
16671666

1668-
retval = self.obj
1667+
retval = self.obj.copy()
16691668
axis = 0
16701669
for i, key in enumerate(tup):
16711670
if i >= self.obj.ndim:

pandas/tests/indexing/test_iloc.py

+2
Original file line numberDiff line numberDiff line change
@@ -596,3 +596,5 @@ def test_loc_identity_slice_returns_new_object(self):
596596
# GH13873
597597
df = DataFrame({'a': [1, 3, 5], 'b': [2, 4, 6]})
598598
assert not df.iloc[:] is df
599+
assert not df.iloc[:,:] is df
600+
assert not df.iloc[pd.IndexSlice[:, :]] is df

pandas/tests/indexing/test_loc.py

+2
Original file line numberDiff line numberDiff line change
@@ -635,3 +635,5 @@ def test_loc_identity_slice_returns_new_object(self):
635635
# GH13873
636636
df = DataFrame({'a': [1, 3, 5], 'b': [2, 4, 6]})
637637
assert not df.loc[:] is df
638+
assert not df.loc[:,:] is df
639+
assert not df.loc[pd.IndexSlice[:, :]] is df

0 commit comments

Comments
 (0)