diff --git a/omegaconf/basecontainer.py b/omegaconf/basecontainer.py index 8cec4327e..f7dcf9d9a 100644 --- a/omegaconf/basecontainer.py +++ b/omegaconf/basecontainer.py @@ -352,7 +352,12 @@ def expand(node: Container) -> None: is_structured_config(dest._metadata.element_type) and not missing_src_value ): - dest[key] = DictConfig(content=dest._metadata.element_type, parent=dest) + if OmegaConf.is_none(dest, key): + dest[key] = DictConfig( + content=dest._metadata.element_type, parent=dest + ) + else: + dest[key] = DictConfig(content=dest_node, parent=dest) dest_node = dest._get_node(key) if dest_node is not None: diff --git a/tests/test_merge.py b/tests/test_merge.py index 70aaefa7a..cb5222ef9 100644 --- a/tests/test_merge.py +++ b/tests/test_merge.py @@ -181,6 +181,13 @@ id="inter:node_over_node_interpolation", ), # Structured configs + ( + ( + DictConfig({"user007": User("bond", 7)}, element_type=User), + {"user007": {"age": 99}}, + ), + {"user007": {"name": "bond", "age": 99}}, + ), (({"user": User}, {}), {"user": User(name=MISSING, age=MISSING)}), (({"user": User}, {"user": {}}), {"user": User(name=MISSING, age=MISSING)}), (