我有一个数据框df2
,它是另一个数据框的副本:
In [5]: df = DataFrame({"A":[1,2,3],"B":[4,5,6],"C":[7,8,9]})
In [6]: df
Out[6]:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
In [7]: df2 = df.copy()
因此不是同一个对象:
In [8]: df is df2
Out[8]: False
In [9]: hex(id(df))
Out[9]: '0x89c6550L'
In [10]: hex(id(df2))
Out[10]: '0x89c6a58L'
我的问题是关于这两个数据框的列。为什么返回的列对象df.columns
是df2.columns
同一个对象?
In [11]: df.columns is df2.columns
Out[11]: True
In [12]: hex(id(df.columns))
Out[12]: '0x89bfb38L'
In [13]: hex(id(df2.columns))
Out[13]: '0x89bfb38L'
但是,如果我进行更改,那么它们会成为两个独立的对象吗?
In [14]: df2.rename(columns={"B":"D"}, inplace=True)
In [15]: df.columns
Out[15]: Index([A, B, C], dtype=object)
In [16]: df2.columns
Out[16]: Index([A, D, C], dtype=object)
In [17]: df.columns is df2.columns
Out[17]: False
In [18]: hex(id(df.columns))
Out[18]: '0x89bfb38L'
In [19]: hex(id(df2.columns))
Out[19]: '0x89bfc88L'
有人可以解释这里发生了什么吗?为什么不是从一开始就df.columns
和df2.columns
两个独立的对象?