この記事では、主に Python のリストに辞書を追加した後の値の変更について簡単に説明します。これには、必要な友達が参照できるように共有します
。
d={'test':1} d_test=d d_test['test']=2 print dコマンドラインで練習してみると、変更したのは d_test ですが、それに応じて d も変更されていることがわかります。 通常、それは私たちが期待しているものではありません。
なぜですか?
辞書 d はオブジェクトであり、d_test=d は実際にはメモリ内に辞書を再度作成しないからです。同じオブジェクトを指しているだけです。これは、Python のパフォーマンスを向上させ、メモリを最適化するための考慮事項でもあります。 実際のシナリオd={"name":""} l=[] for i in xrange(5): d["name"]=i l.append(d) print lループは、あなたが望む結果と同じではない可能性があります。 リストに追加されたとしても、リストに格納されているものはオブジェクト、つまり辞書のアドレスです。メモリ内の実際の記憶領域ではありません。 .copy() メソッドを使用します。新しい独立した辞書を作成できます
d={"name":""} l=[] for i in xrange(5): test=d.copy() test["name"]=i l.append(test) print l
更新:
a={'q':1,'w':[]} b=a.copy() b['q']=2 b['w'].append(123) print a print bこの時点では、a の 'q' の値は変化しないことがわかりますが、値はリスト内の変更は依然として発生しますコピーは浅いコピーであるためしかし、トラックがある
a={'q':1,'w':[]} b=a.copy() b['q']=2 b['w']=[123] print a print bそれを直接割り当てた場合、aの構造は変更されません(主にappendメソッドが原因です) )
ディープレベルコピー
import copy a={'q':1,'w':[]} b=copy.deepcopy(a)関連する推奨事項:
Python は空のリストを作成し、append の使用方法を説明します
以上がPythonでリストに辞書を追加した後の値の変更についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。