Python-Wörterbuch ändert sich bei Verwendung der Zwischenvariablen

Ich füttere eine Funktion mit einem String, der den String char by char liest. Basierend auf dem Zeichen, an dem gearbeitet wird, wird eine JSON-Vorlage aus einem Wörterbuch aufgerufen, leicht bearbeitet und in einem endgültigen Wörterbuch gespeichert, das in JSON analysiert und gespeichert wird.

Das Problem ist, dass dieses Vorlagenwörterbuch konstant bleiben sollte, aber nicht. Irgendwie werden die Werte, die ich in die Zwischenvariable schreibe, im ursprünglichen Vorlagenverzeichnis gespeichert, wodurch die nachfolgenden Daten, die ich zu speichern versuche, durcheinander gebracht werden.

Fehlt mir ein grundlegendes Konzept des Wörterbuchs? Ich arbeite zum ersten Mal in einem solchen Ausmaß mit Wörterbüchern, sodass ich nicht einmal überrascht wäre.

Das Vorlagenwörterbuch:

self.map_legend = {"#": {"Id": 100, "Alive": False, "X": 0, "Y": 0, "Width": 1, "Height": 1, "Type": "Wall", "PlayerNumber": 0},
              "-": {"Id": 200, "Alive": False, "X": 0, "Y": 0, "Width": 1, "Height": 1, "Type": "Shield", "PlayerNumber": 0},
              "x": {"Id": 300, "Alive": False, "X": 0, "Y": 0, "Width": 1, "Height": 1, "Type": "Alien", "PlayerNumber": 0},
              "|": {"Id": 400, "Alive": False, "X": 0, "Y": 0, "Width": 1, "Height": 1, "Type": "AlienBullet", "PlayerNumber": 0},
              "!": {"Id": 500, "Alive": False, "X": 0, "Y": 0, "Width": 1, "Height": 1, "Type": "Missile", "PlayerNumber": 0},
              "i": {"Id": 500, "Alive": False, "X": 0, "Y": 0, "Width": 1, "Height": 1, "Type": "Missile", "PlayerNumber": 1},
              "M": {"Id": 600, "Alive": False, "X": 0, "Y": 0, "Width": 3, "Height": 1, "Type": "MissileController", "PlayerNumber": 0},
              "X": {"Id": 700, "Alive": False, "X": 0, "Y": 0, "Width": 3, "Height": 1, "Type": "AlienFactory", "PlayerNumber": 0},
              "A": {"Id": 800, "Alive": False, "X": 0, "Y": 0, "Width": 3, "Height": 1, "Type": "Ship", "PlayerNumber": 0},
              "V": {"Id": 800, "Alive": False, "X": 0, "Y": 0, "Width": 3, "Height": 1, "Type": "Ship", "PlayerNumber": 1},
              " ": {"Id": 900, "Alive": False, "X": 0, "Y": 0, "Width": 1, "Height": 1, "Type": "Space", "PlayerNumber": 0}}

Der Problemcode:

for char in self.initial_game_map:
    if char != "\n":
        element = self.map_legend[char]
        self.id_counters[char] += 1

        element["Id"] = self.id_counters[char] + element["Id"]
        element["Alive"] = True
        element["X"] = char_counter % self.state_json["Map"]["Height"]
        element["Y"] = char_counter / self.state_json["Map"]["Height"]
        print self.map_legend[char]
        print element

        row.append(element)
        element = {}
        char_counter += 1

    else:
        self.state_json["Map"]["Rows"].append(row)
        row = []

Einige Ausgabe:

V
{'Width': 3, 'PlayerNumber': 1, 'Y': 1, 'X': 2, 'Type': 'Ship', 'Id': 801, 'Alive': True, 'Height': 1}
{'Width': 3, 'PlayerNumber': 1, 'Y': 1, 'X': 2, 'Type': 'Ship', 'Id': 801, 'Alive': True, 'Height': 1}
#
{'Width': 1, 'PlayerNumber': 0, 'Y': 0, 'X': 18, 'Type': 'Wall', 'Id': 103, 'Alive': True, 'Height': 1}
{'Width': 1, 'PlayerNumber': 0, 'Y': 0, 'X': 18, 'Type': 'Wall', 'Id': 103, 'Alive': True, 'Height': 1}

daselement Variable verhält sich wie es sein soll, aber Sie können sehen, dassself.map_legend nimmt den Wert von @ element aus irgendeinem Grund nachelement wird geändert, was ich NICHT will. Was ist los

Antworten auf die Frage(4)

Ihre Antwort auf die Frage