I don't understand why this renaming operation affects the original dataframe when the copy command is used. Why is df_copy a view of df and not really a copy? I would expect the print statement to output 'x' not 'y'.
df = pandas.DataFrame({'x': [0, 1]})
df_copy = df.copy(deep=True)
df_copy.columns.values[0] = 'y'
print(df.columns)