From da6f429f5513a45130533d11c1b08e931b931718 Mon Sep 17 00:00:00 2001 From: "Hock, Martin" <martin.hock@fst.tu-darmstadt.de> Date: Mon, 6 Mar 2023 10:28:45 +0100 Subject: [PATCH] Adjust dict and key/value pair assignments to use deepcopy in constructor and clone() --- functions/classes.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/functions/classes.py b/functions/classes.py index 014ec6e..5a14dc8 100644 --- a/functions/classes.py +++ b/functions/classes.py @@ -8,6 +8,7 @@ import json import operator from enum import Enum, auto from typing import List, Dict, Optional +from copy import deepcopy class AggregationLayer(Enum): @@ -83,14 +84,14 @@ class LegoComponent: if label is not None: self.properties["label"] = label if datasheet is not None: - self.properties.update(datasheet) + self.properties.update(deepcopy(datasheet)) for prop in more_properties: if isinstance(prop, dict): - self.properties.update(prop) + self.properties.update(deepcopy(prop)) else: raise ValueError(f"Unexpected argument type: {type(more_properties)}") for key, value in kwargs.items(): - self.properties[key] = value + self.properties[key] = deepcopy(value) def clone(self, new_label: Optional[str] = None) -> LegoComponent: """ @@ -113,7 +114,7 @@ class LegoComponent: """ if new_label is None: new_label = self.properties["label"] - clone = LegoComponent(None, None, self.properties) + clone = LegoComponent(None, None, deepcopy(self.properties)) clone.properties["label"] = new_label return clone @@ -207,11 +208,11 @@ class LegoAssembly: self.properties["label"] = label for prop in properties: if isinstance(prop, dict): - self.properties.update(prop) + self.properties.update(deepcopy(prop)) else: raise ValueError(f"Unexpected argument type: {type(properties)}") for key, value in kwargs.items(): - self.properties[key] = value + self.properties[key] = deepcopy(value) self.components: List[LegoComponent] = [] self.assemblies: List[LegoAssembly] = [] @@ -419,7 +420,7 @@ class LegoAssembly: """ if label is None: label = self.properties["label"] - clone = LegoAssembly(self.layer, None, self.properties) + clone = LegoAssembly(self.layer, None, deepcopy(self.properties)) clone.properties["label"] = label for component in self.components: clone.add_component(component.clone()) -- GitLab