PandasでDataFrame型をコピーする際はシャローとディープの違いに注意

PandasでDataFrame型をコピーしたい時には注意が必要。具体的には、新しい変数へ代入するだけだと参照コピーになり、もとのDataFrameの値が変わると代入先の値も変わってしまう。中身はまるっきり同じだが異なるDataFrameを作りたい場合は、copy()メソッドを使用する。

シャローコピーとディープコピーとは?

PandasのDataFrameでなくとも、ディープコピーとシャローコピーの違いによる影響は様々な場面で出会う。それぞれカンタンなメモを。

シャローコピー

シャローコピーとはいわゆる参照コピーで、変数が格納されている場所をコピーする。
元変数の中身とシャローコピー先の変数の中身は同じ場所の値となる。

元変数の値を変更すると、シャローコピー先の変数も変更されてしまう。
というのも、同じ場所を指しているだけだから。

逆も然りで、シャローコピー先の変数の値を変更すると、元変数の値も変更されてしまう。
というのも、同じ場所を指しているだけだから。

ディープコピー

ディープコピーは、変数の参照先の値を新しい場所にコピーする。
なので元変数の値を書き換えても、ディープコピー先の変数の値は変わらない。
逆も然りで、ディープコピー先の変数の値を変えても、元変数の値に影響はない。

PandasのDataFrame型でシャローコピーとディープコピーを書いてみた