diff --git a/CHANGES/1320.misc.rst b/CHANGES/1320.misc.rst new file mode 100644 index 000000000..75abf762f --- /dev/null +++ b/CHANGES/1320.misc.rst @@ -0,0 +1 @@ +Improved performance of the :py:meth:`~yarl.URL.with_name` method -- by :user:`bdraco`. diff --git a/yarl/_url.py b/yarl/_url.py index f978d0616..a6f219658 100644 --- a/yarl/_url.py +++ b/yarl/_url.py @@ -1528,7 +1528,8 @@ def with_name(self, name: str) -> "URL": if name in (".", ".."): raise ValueError(". and .. values are forbidden") parts = list(self.raw_parts) - if self._val.netloc: + scheme, netloc, _, _, _ = self._val + if netloc: if len(parts) == 1: parts.append(name) else: @@ -1538,9 +1539,8 @@ def with_name(self, name: str) -> "URL": parts[-1] = name if parts[0] == "/": parts[0] = "" # replace leading '/' - return self._from_val( - self._val._replace(path="/".join(parts), query="", fragment="") - ) + val = tuple.__new__(SplitResult, (scheme, netloc, "/".join(parts), "", "")) + return self._from_val(val) def with_suffix(self, suffix: str) -> "URL": """Return a new URL with suffix (file extension of name) replaced.