pythonでdictやlistなどの可変オブジェクトに対してappend操作を行う

681 ワード

python append()と深いコピー、浅いコピー
深浅コピー
pythonでは、オブジェクトの割り当ては実際にはオブジェクトの参照です.オブジェクトを作成して別の変数に割り当てると、pythonはオブジェクトをコピーせず、オブジェクトの参照をコピーしただけです.私たちは浅いコピーと呼ばれています.
pythonでは、付与操作を行うときに2つの変数が相補的に影響するように、copyモジュールのdeepcopyメソッドを深コピーと呼ぶことができる.
append()関数
リストタイプやdictなどの可変オブジェクトに対してappend操作を行うと,実際にはそのオブジェクトの参照が追加される.例:
alist = []
num = [2]
alist.append( num )
id( num ) == id( alist[0] )
  : True

上記の例に示すようにnumが変化すると(id(num)が変化しないことを前提とする)、alistの内容は変化する.予期せぬ結果をもたらすことが多いため、このような状況を回避するには、深いコピーを使用して解決することができます.
alist.append( copy.deepcopy( num ) )

PS:id()関数:オブジェクトの一意の識別を返し、そのオブジェクトのメモリ内のアドレスに類比することができる.