Pythonでリストに辞書を追加した後の値の変更についての簡単な説明

不言
リリース: 2018-05-04 14:13:53
オリジナル
2544 人が閲覧しました

この記事では、主に 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート