イントロダクション
この記事では、Pythonで辞書をコピーするためのさまざまな方法とテクニックを説明します。
理論的には、Pythonの辞書は、キーと項目のペアとして対応する要素を格納するデータ値の順序不同のコレクションです。
さらに、各項目は、対応するキーを使用してユーザーがアクセスすることができます。
それでは、さっそくコピーの手順を説明します。
この記事もチェック:Pythonの辞書にキーが存在するかどうかを確認する4つの簡単なテクニック
Pythonで辞書をコピーする方法
このセクションでは、Pythonで辞書をコピーする4つの異なる方法について詳しく説明するつもりです。
それでは、一つずつ見ていきましょう。
1. 辞書を要素ごとにコピーする
この手法では、辞書全体を走査し、キーが指す各要素をあらかじめ宣言された新しい辞書にコピーします。
以下のコードを見てほしい。
#given dictionary dict1 = { 0 : '1' , 1 : '2' , 3 :[ 1 , 2 , 3 ]}
print ( "Given Dictionary:" ,dict1)
#new dictionary dict2 = {}
for i in dict1:
dict2[i] = dict1[i] #element by elemnet copying
print ( "New copy:" ,dict2)
#Updating dict2 elements and checking the change in dict1 dict2[ 1 ] = 33
dict2[ 3 ][ 1 ] = '22' #list item updated
print ( "Updated copy:" ,dict2)
print ( "Given Dictionary:" ,dict1)
|
結果は、以下の通りになります。
Given Dictionary: { 0 : '1' , 1 : '2' , 3 : [ 1 , 2 , 3 ]}
New copy: { 0 : '1' , 1 : '2' , 3 : [ 1 , 2 , 3 ]}
Updated copy: { 0 : '1' , 1 : 33 , 3 : [ 1 , '22' , 3 ]}
Given Dictionary: { 0 : '1' , 1 : '2' , 3 : [ 1 , '22' , 3 ]}
|
ここで
- 辞書 dict1 を初期化した。
- それを表示した後、空の辞書 dict2 を宣言し、dict1 をコピーしています。
- 次に、dict1をforループで走査します。そして、
dict2[i]=dict1[i]
という操作で、dict1 から dict2 へ要素をコピーしています。
これでコピーが完了しましたが、=
演算子は辞書の中の反復可能なオブジェクトの参照を作成することを覚えておいてください。
したがって、dict2 の非反復可能な要素が更新された場合、dict1 の対応する要素はそのまま維持されます。
一方、リスト項目のような反復可能なオブジェクトが変更された場合、dict1 のリストも変更されるのがわかります。
上のコードの2番目の部分でこれを説明しています。
更新後のdict1とdict2の両方の結果を比較してみてください。
上の記述が正しいことがわかります。
2. Pythonで辞書をコピーするために=演算子を使用する
Pythonで辞書を直接コピーするには、「=」演算子1つでできることを見てみましょう。
#given dictionary dict1 = { 1 : 'a' , 2 : 'b' , 3 :[ 11 , 22 , 33 ]}
print ( "Given Dictionary:" ,dict1)
#new dictionary dict2 = dict1 #copying using = operator
print ( "New copy:" ,dict2)
#Updating dict2 elements and checking the change in dict1 dict2[ 1 ] = 33
dict2[ 3 ][ 2 ] = '44' #list item updated
print ( "Updated copy:" ,dict2)
print ( "Given Dictionary:" ,dict1)
|
結果は以下の通りです。
Given Dictionary: { 1 : 'a' , 2 : 'b' , 3 : [ 11 , 22 , 33 ]}
New copy: { 1 : 'a' , 2 : 'b' , 3 : [ 11 , 22 , 33 ]}
Updated copy: { 1 : 33 , 2 : 'b' , 3 : [ 11 , 22 , '44' ]}
Given Dictionary { 1 : 33 , 2 : 'b' , 3 : [ 11 , 22 , '44' ]}
|
上のコードでは
- まず、dict1 という辞書を初期化します。そして、
dict2=dict1
というコードによって、それを新しいオブジェクト dict2 に直接コピーします。 - この操作は、dict1 に存在する各オブジェクトの参照を、新しい辞書である dict2 にコピーします。
- したがって、dict2 の任意の要素を更新すると dict1 が変更され、その逆もまた然りです。
- 上記のコードから明らかなように、dict2 の任意の(反復可能または非反復可能な)オブジェクトを 更新すると、dict1 にも同じ変化が見られます。
3. copy() メソッドの使用
Pythonの辞書の copy()
メソッドは、与えられた辞書の浅いコピーを返します。
これは、以前に見た、辞書を走査して要素をコピーする場合と似ています。
つまり、辞書の要素の参照が新しい辞書に挿入されます(Shallow copy)。
以下のコードを見てください。
#given dictionary dict1 = { 10 : 'a' , 20 :[ 1 , 2 , 3 ], 30 : 'c' }
print ( "Given Dictionary:" ,dict1)
#new dictionary dict2 = dict1.copy() #copying using copy() method
print ( "New copy:" ,dict2)
#Updating dict2 elements and checking the change in dict1 dict2[ 10 ] = 10
dict2[ 20 ][ 2 ] = '45' #list item updated
print ( "Updated copy:" ,dict2)
print ( "Given Dictionary:" ,dict1)
|
結果は、以下の通りになります。
Given Dictionary: { 10 : 'a' , 20 : [ 1 , 2 , 3 ], 30 : 'c' }
New copy: { 10 : 'a' , 20 : [ 1 , 2 , 3 ], 30 : 'c' }
Updated copy: { 10 : 10 , 20 : [ 1 , 2 , '45' ], 30 : 'c' }
Given Dictionary: { 10 : 'a' , 20 : [ 1 , 2 , '45' ], 30 : 'c' }
|
上記のコードでは
- 辞書 dict1 をいくつかの値で初期化します。そして、
copy()
メソッドを用いて、浅いコピーを作成します。 - コピーが作成された後、新しい要素を更新し、それに対応する元の辞書の変更を確認します。
- 要素ごとのコピーの場合と同様に,ここでも dict2 の非反復可能な要素の変化は,元の辞書に影響を与えません.
- リストのような反復可能な要素の場合、与えられた辞書であるdict1にも変更が反映される。
4. Python で辞書をコピーする copy.deepcopy() メソッドの使用法
Pythonの deepcopy()
メソッドは、copyモジュールのメンバです。
このメソッドは、渡された辞書の要素をコピーした新しい辞書を返します。
このメソッドは、与えられた辞書のすべての要素を再帰的にコピーすることに注意してください。
では、その使い方を見てみましょう。
import copy
#given dictionary dict1 = { 10 : 'a' , 20 :[ 1 , 2 , 3 ], 30 : 'c' }
print ( "Given Dictionary:" ,dict1)
#new dictionary dict2 = copy.deepcopy(dict1) #copying using deepcopy() method
print ( "New copy:" ,dict2)
#Updating dict2 elements and checking the change in dict1 dict2[ 10 ] = 10
dict2[ 20 ][ 2 ] = '45' #list item updated
print ( "Updated copy:" ,dict2)
print ( "Given Dictionary:" ,dict1)
|
結果は以下の通りです。
Given Dictionary: { 10 : 'a' , 20 : [ 1 , 2 , 3 ], 30 : 'c' }
New copy: { 10 : 'a' , 20 : [ 1 , 2 , 3 ], 30 : 'c' }
Updated copy: { 10 : 10 , 20 : [ 1 , 2 , '45' ], 30 : 'c' }
Given Dictionary: { 10 : 'a' , 20 : [ 1 , 2 , 3 ], 30 : 'c' }
|
さて
- 最初の行で、元の辞書 dict1 を初期化します。
- copy.deepcopy()`メソッドを用いて、dict1の要素を新しい辞書dict2にコピーしています。
- コピーに成功したら,新しい辞書を更新し,元の辞書の変更を確認します.
- 出力からわかるように,dict2 の変更は dict1 には反映されません.したがって,このメソッドは,元の辞書をそのままに,新しい辞書を変更する必要がある場合に便利です.
まとめ
この記事では、Pythonで辞書をコピーする4つの異なる方法について学びました。
このトピックに関するご質問は、以下のコメント欄からお気軽にどうぞ。