Open
Description
From a comment of @jbrockmendel at #41878 (comment):
ser = pd.Series(range(5))
idx = pd.Index(ser)
ser[0] = 10
>>> idx[0]
10
In the above, we create an Index from a Series, then mutate the Series, which also updated the Index, while an Index is assumed to be immutable.
Changing the example a bit, you can obtain wrong values with indexing this way:
ser = pd.Series(range(5))
idx = pd.Index(ser)
ser.index = idx
>>> ser[0]
0
>>> ser.iloc[0] = 10
>>> ser[0]
10
>>> ser
10 10
1 1
2 2
3 3
4 4
dtype: int64
So ser[0]
is still giving a result, while that key doesn't actually exist in the Series' index at that point.
I know that generally we consider this a user error if you would do this with a numpy array (idx = pd.Index(arr)
and mutating the array), but here you get that by only using high-level pandas objects itself. In which case we should prevent this from happening?