Pythonでは、変数間で値をコピーする際にはcopy
メソッドがよく使われます。このメソッドを使うと、元の変数の値が変更されても、コピーされた変数の値は影響を受けません。これを「値渡し」と呼びます。
list1 = [1, 2, 3]
list2 = list1.copy()
list1[0] = 100
print("list1:", list1)
print("list2:", list2)
上記のコードでは、list1
の最初の要素の値を変更しても、list2
の値は変わりません。これは、copy
メソッドによってlist1
の値がlist2
にコピーされ、list2
は新しいオブジェクトを参照しているからです。
しかし、多次元配列など、オブジェクトの中にさらにオブジェクトが含まれる場合は、copy
メソッドだけでは値渡しになりません。そのような場合にはcopy
ライブラリのdeepcopy
メソッドを使用します。
import copy
list1 = [[1, 2, 3], [4, 5, 6]]
list2 = list1.copy()
list3 = copy.deepcopy(list1)
list1[0][0] = 100
print("list1:", list1)
print("list2:", list2)
print("list3:", list3)
このコードでは、list1
の要素の値を変更しても、list3
の値は変わりません。これは、deepcopy
メソッドによってlist1
の値がlist3
に完全にコピーされ、list3
は全く新しいオブジェクトを参照しているからです。
以上がPythonのcopy
メソッドと値渡しについての基本的な説明です。この知識を持っておくと、Pythonでのプログラミングがよりスムーズになります。