How about `dict(self._default_namespaces)` or `self._default_namespaces.copy()`?. Both would achieve the same without requiring the `copy` import.

I think the `ns` variable is also unnecessary, consider this:

    self.namespaces = self._default_namespaces.copy()
    self.namespaces.update(namespaces or {})

Finally, how about optimizing the common case to avoid duplicating the `_default_namespaces` dict on every `Selector` instantiatation? (which are a lot)

    if namespaces is None:
        self.namespaces = self._default_namespaces
    else:
        self.namespaces = self._default_namespaces.copy()
        self.namespaces.update(namespaces)

I'm really unsure about the impacts of this dict duplication, I would do some profiling to confirm it's worthwhile.