mirror of https://github.com/python/cpython
GH-119518: Stop interning strings in pathlib GH-123356)
Remove `sys.intern(str(x))` calls when normalizing a path in pathlib. This speeds up `str(Path('foo/bar'))` by about 10%.
This commit is contained in:
parent
77a2fb4bf1
commit
5002f17794
|
@ -272,8 +272,7 @@ class PurePath(PurePathBase):
|
||||||
elif len(drv_parts) == 6:
|
elif len(drv_parts) == 6:
|
||||||
# e.g. //?/unc/server/share
|
# e.g. //?/unc/server/share
|
||||||
root = sep
|
root = sep
|
||||||
parsed = [sys.intern(str(x)) for x in rel.split(sep) if x and x != '.']
|
return drv, root, [x for x in rel.split(sep) if x and x != '.']
|
||||||
return drv, root, parsed
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _raw_path(self):
|
def _raw_path(self):
|
||||||
|
|
|
@ -163,15 +163,6 @@ class PurePathTest(test_pathlib_abc.DummyPurePathTest):
|
||||||
# Special case for the empty path.
|
# Special case for the empty path.
|
||||||
self._check_str('.', ('',))
|
self._check_str('.', ('',))
|
||||||
|
|
||||||
def test_parts_interning(self):
|
|
||||||
P = self.cls
|
|
||||||
p = P('/usr/bin/foo')
|
|
||||||
q = P('/usr/local/bin')
|
|
||||||
# 'usr'
|
|
||||||
self.assertIs(p.parts[1], q.parts[1])
|
|
||||||
# 'bin'
|
|
||||||
self.assertIs(p.parts[2], q.parts[3])
|
|
||||||
|
|
||||||
def test_join_nested(self):
|
def test_join_nested(self):
|
||||||
P = self.cls
|
P = self.cls
|
||||||
p = P('a/b').joinpath(P('c'))
|
p = P('a/b').joinpath(P('c'))
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Speed up normalization of :class:`pathlib.PurePath` and
|
||||||
|
:class:`~pathlib.Path` objects by not interning string parts.
|
Loading…
Reference in New Issue