From 48a467989c5b375e8ec0159544a5d72850dc1680 Mon Sep 17 00:00:00 2001 From: Sandesh K A Date: Fri, 13 Feb 2026 14:56:47 +0100 Subject: [PATCH] Optimize subnode copying by avoiding deepcopy in merge functions Optimize handling of subnodes by avoiding deepcopy for large binary blobs and implementing shallow copies for FdtPropertyBytes. --- pyfdt/pyfdt.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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: