pandasのDataFlameのコピーは”=”じゃだめ

みんな、普通に

df = pd.DataFrame(data=[(0,1),(2,3)])
df2 = df
df2.ix[0,0]=9999
print(df)
print(df2)

て書いてるけど
さて、どんな表示がされるでしょうか?

答え

     0  1
0 9999  1
1    2  3

     0  1
0 9999  1
1    2  3

ん!?
コピー元まで変わってる!?

どうもpandasの=はデータのコピーではなく、C言語的に言うとアドレス(ポインタ)を渡すだけ。
つまり、データがある場所のリンクを渡しているだけです。
なので、普通の感覚で値がコピーされると思って使っていると思わぬところでバグを生みます。

C言語とかならヘッダファイル見れば入出力の型はわかるのですが、pythonはないんですよね。
APIリファレンスとか見てもいまいちよくわからないから、動かしてみるしかないという…。
pythonってすごくわかりにくい。

タイトルとURLをコピーしました