def _set_virtual(self, key, value):
        """ Recursively set or update virtual keys. Do nothing if non-virtual
            value is present. """
        if key in self and key not in self._virtual_keys:
            return  # Do nothing for non-virtual keys.

        self._virtual_keys.add(key)
        if key in self and self[key] is not value:
            self._on_change(key, value)
        dict.__setitem__(self, key, value)
        for overlay in self._iter_overlays():
            overlay._set_virtual(key, value)
Recursively set or update virtual keys. Do nothing if non-virtual
            value is present.