辞書リストの格納原理について

3745 ワード

names = ["a", "b", 'c', 'd']
data = {}
a = []
for i in names:
    data["name"] = i
    a.append(data)
print(a)
--------------------------[{'name': 'd'}, {'name': 'd'}, {'name': 'd'}, {'name': 'd'}]

原理分析:dict(辞書)はlistに付与される位置であり、このコードに対してdataはループ外で定義され、a.append(data)を用いてlistに付与されるたびに同じ位置であり、同じ位置のdictの値が変化したため、listが取得した前の位置の値が変化し、後のデータが前のデータを上書きする表象を示す.dictはループ内で定義され、ループごとにdataを生成することに相当し、異なる位置記憶値を占有するため、listの異なる要素の異なる位置に割り当て、異なる値を得ることができる.
詳細説明:Pythonのオブジェクト間で値を割り当てる場合は参照で渡され、オブジェクトをコピーする必要がある場合は、標準ライブラリのcopyモジュールを使用する必要があります.
  • copy.copy浅いコピーは親オブジェクトのみをコピーし、オブジェクトの内部のサブオブジェクトはコピーしません.
  • copy.deepcopyコピーコピーオブジェクトおよびそのサブオブジェクト