I持って次のコード付加は、すべてのアレイに追加
a_dict = dict.fromkeys(['a', 'b', 'c'], [])
a_dict['a'].append(1)
print(a_dict)
出力1はなく持つただ一つのすべてのアレイに追加された理由
`{'a': [1], 'c': [1], 'b': [1]}`
キーa
?キーa
で追加する場合はどうしたらいいですか?
I持って次のコード付加は、すべてのアレイに追加
a_dict = dict.fromkeys(['a', 'b', 'c'], [])
a_dict['a'].append(1)
print(a_dict)
出力1はなく持つただ一つのすべてのアレイに追加された理由
`{'a': [1], 'c': [1], 'b': [1]}`
キーa
?キーa
で追加する場合はどうしたらいいですか?
aha、dict.fromkeysは値のコピーを1つだけ作成し、そのポインタを返します。 a_dict = {'a':[]、 'b':[]、c ':[]}のように初期化されている場合、コードは期待どおりに動作します。
yet_another_dict = {キー:[] [ 'A'、 'B'、 'C']におけるキーの}
は、答えが提案dict.fromkeys all point to same list
で重複を発見しました
fromkeys()メソッドは、指定された要素のシーケンスを辞書のキーとして持つ新しい辞書を返します。
value引数が設定されている場合、新しく作成された辞書の各要素は、指定された値に設定されます。
リストやディクショナリなどの可変オブジェクト(値を変更可能)である場合、変更可能オブジェクトが変更されると、シーケンスの各要素も更新されます。
これは、各要素に同じオブジェクト(メモリ内の同じオブジェクトを指す)への参照が割り当てられているためです。
これについての参考資料がありますか? ?私は[documentation](https://docs.python.org/2/library/stdtypes.html#dict.fromkeys)を確認しましたが、これについて何も見つかりませんでした –
@KJPhanはい、あなたは[ ](https://www.programiz.com/python-programming/methods/dictionary/fromkeys) –
@KJPhan一般的に、これはPythonの仕組みです。物は暗黙的にコピーされません。 –
a_dict = dict.fromkeys(['a', 'b', 'c'], [])
これは、キー 'a'、 'b'、 'c'を持つ辞書を作成し、各キーの値は[]
です。
ここで問題となるのは、各キーが同じ値を指していることです。同じ空のdictインスタンス[]
がメモリにあります。
a_dict['a']
とa_dict['b']
は(等しいと評価する)等しいだけではなく、まったく同じインスタンスです。作成した辞書には3つのキーがあり、各キーの値は同じ空のディクショナリインスタンスへのポインタです。
あなたはそれをチェックすることができます。このように
a_dict['a'] == a_dict['b']
# Returns True: both are equal
a_dict['a'] is a_dict['b']
# Also returns True: both are the same instance
を、dict
インスタンスを共有し、a_dict['b']
に影響a_dict['a']
修正を修正します。
実際に説明したものではありませんが、これは問題を解決します - 'a_dict ['a'] = 1' – SRC