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

Python では、オブジェクトへの代入は実際にはオブジェクトの参照です。オブジェクトを作成して別の変数に代入するとき、Python はこのオブジェクトをコピーするのではなく、その参照だけをコピーします。これをシャローコピーと呼びます。

Python では、代入操作を行うときに2つの変数が互いに影響しないようにするには、copy モジュールの deepcopy メソッドを使用できます。これをディープコピーと呼びます。

append() 関数

list 型のオブジェクトに対して append 操作を行うとき、実際に追加されるのはそのオブジェクトの参照です。

id()関数:オブジェクトの一意の識別子を返します。これはオブジェクトのメモリ上のアドレスに例えることができます。

>>>alist = [] >>> num = [2] >>> alist.append( num ) >>> id( num ) == id( alist[0] ) True
上記の例のように、num が変化するとき(前提として id(num) が変化しない場合)、alist の内容もそれに伴って変化します。これにより、しばしば予期しない結果が生じます。このような状況を避けたい場合は、ディープコピーを使用して解決できます:
alist.append( copy.deepcopy( num ) )

原文アドレス:https://blog.csdn.net/u010099495/article/details/50276833