Pythonの変数の値の代入とコピーにはどのような方法がありますか
Pythonでは、変数の代入とコピーは次の方法で行われます。
- 値の代入:ある変数の値を別の変数に代入すると、両者は同じメモリアドレスを指します。どちらかの変数の値が変更されると、もう一方の変数の値にも反映されます。
a = 10
b = a
- 浅いコピーとは、もう1つの変数を生成するが、元オブジェクトのメモリアドレスを引き継ぎます。元オブジェクト中の可変項目を変更すると、コピーされた変数にも反映されます。但し、変数の変更は、元オブジェクトには反映されません。
import copy
a = [1, 2, 3]
b = copy.copy(a)
- ディープコピー: 新しい変数を作り、元のオブジェクトの中のすべての要素を新しい変数にコピー、 入れ子オブジェクトも含む。 元のオブジェクトやコピーの変数のどちらかの要素を変更しても相互に影響を与えない。
import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
- スライス代入:リスト、タプル、文字列などのイテラブルオブジェクトに対して、新しい変数を作成するためにスライス代入を使用できます。スライス代入は新しいオブジェクトを作成しますが、それでも依然として元のオブジェクトのメモリアドレスを参照します。元のオブジェクト内の可変要素を変更すると新しい変数に影響しますが、新しい変数を変更しても元のオブジェクトには影響しません。
a = [1, 2, 3]
b = a[:]