Python の辞書 (dictionary) - コピー
ここでは Python の辞書 (dictionary) のコピーの方法についてご説明します。
辞書のリファレンスのコピー
Python の辞書をコピーして、新しい辞書を作りたい時があるかもしれません。
そんな時に = をつかって代入してしまうと、新しい辞書ができるのではなく、元の辞書へのリファレンスをコピーしたことになり、同じ辞書をポイントしているので、どちらかの辞書を変更すると、もう片方も変更されてしまいます。
言葉ではわかりにくいかもしれないので、実際にコードを実行して確認してみましょう。
student1 = {
"name": "Suzuki",
"age": 15,
"gender": "male"
}
student2 = student1
student1["age"] = 10
print(student1)
print(student2)
student2["name"] = "Yamamoto"
print(student1)
print(student2)
実行結果は次のようになります。student1 の age の値を変更すると、student2 の age も変更されますし、student2 の name の値を変更すると、student1 の name まで変更されてしまっていますね。
{'name': 'Suzuki', 'age': 10, 'gender': 'Male'}
{'name': 'Suzuki', 'age': 10, 'gender': 'Male'}
{'name': 'Yamamoto', 'age': 10, 'gender': 'Male'}
{'name': 'Yamamoto', 'age': 10, 'gender': 'Male'}
辞書を copy() メソッドでコピーする
Python で辞書をコピーして新しい辞書を作りたい時には copy() メソッドを使います。
student1 = {
"name": "Suzuki",
"age": 15,
"gender": "male"
}
student2 = student1.copy()
student1["age"] = 10
print(student1)
print(student2)
student2["name"] = "Yamamoto"
print(student1)
print(student2)
実行結果は次のようになります。 student1 辞書のキーと値のペアが student 2 にコピーされ、値を変更してもそれぞれ、student1 のみ、student2 のみが変更されていますね。
{'name': 'Suzuki', 'age': 10, 'gender': 'Male'}
{'name': 'Suzuki', 'age': 15, 'gender': 'Male'}
{'name': 'Suzuki', 'age': 10, 'gender': 'Male'}
{'name': 'Yamamoto', 'age': 15, 'gender': 'Male'}
辞書を dict() コンストラクタでコピーする
dict() コンストラクタを使っても、次のようにして Python の辞書をコピーすることができます。
student1 = {
"name": "Suzuki",
"age": 15,
"gender": "male"
}
student2 = dict(student1)
student1["age"] = 10
print(student1)
print(student2)
student2["name"] = "Yamamoto"
print(student1)
print(student2)
実行結果は次のようになり、先ほどと同様に student1 辞書のキーと値のペアが student 2 にコピーされているのがわかります。
{'name': 'Suzuki', 'age': 10, 'gender': 'Male'}
{'name': 'Suzuki', 'age': 15, 'gender': 'Male'}
{'name': 'Suzuki', 'age': 10, 'gender': 'Male'}
{'name': 'Yamamoto', 'age': 15, 'gender': 'Male'}
以上、Python の辞書 (dictionary) のコピーの方法についてご説明しました。