pythonでdictやlistなどの可変オブジェクトに対してappend操作を行う
681 ワード
python append()と深いコピー、浅いコピー
深浅コピー
pythonでは、オブジェクトの割り当ては実際にはオブジェクトの参照です.オブジェクトを作成して別の変数に割り当てると、pythonはオブジェクトをコピーせず、オブジェクトの参照をコピーしただけです.私たちは浅いコピーと呼ばれています.
pythonでは、付与操作を行うときに2つの変数が相補的に影響するように、copyモジュールのdeepcopyメソッドを深コピーと呼ぶことができる.
append()関数
リストタイプやdictなどの可変オブジェクトに対してappend操作を行うと,実際にはそのオブジェクトの参照が追加される.例:
上記の例に示すようにnumが変化すると(
PS:id()関数:オブジェクトの一意の識別を返し、そのオブジェクトのメモリ内のアドレスに類比することができる.
深浅コピー
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()関数:オブジェクトの一意の識別を返し、そのオブジェクトのメモリ内のアドレスに類比することができる.