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) のコピーの方法についてご説明しました。

© 2024 やさしい Python 入門