diff --git a/functions/classes.py b/functions/classes.py index 014ec6e170d5c1b6e52f083d0f10516ea546658d..5a14dc8a344368a7c4fb4ea49d923225a39e2f1b 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())