diff --git a/pyfdt/pyfdt.py b/pyfdt/pyfdt.py index 566d46e..1656d0e 100644 --- a/pyfdt/pyfdt.py +++ b/pyfdt/pyfdt.py @@ -624,10 +624,18 @@ def merge(self, node): if isinstance(obj, (FdtNode, FdtProperty))]: index = self._find(subnode.get_name()) if index is None: - dup = deepcopy(subnode) - if isinstance(subnode, FdtNode): - dup.set_parent_node(self) - self.append(dup) + # avoid deepcopy for large binary blobs + if isinstance(subnode, FdtPropertyBytes): + # shallow copy of bytes for FdtPropertyBytes + dup = FdtPropertyBytes(subnode.name, list(subnode.bytes)) + elif isinstance(subnode, FdtNode): + dup = FdtNode(subnode.name) + for child in subnode.subdata: + dup.append(child) + dup.set_parent_node(self) + else: + dup = copy(subnode) + self.append(dup) elif isinstance(subnode, FdtNode): self.subdata[index].merge(subnode) else: