gh-132657: improve deepcopy and copy scaling on free-threading (#138429)
This commit is contained in:
16
Lib/copy.py
16
Lib/copy.py
@@ -100,14 +100,14 @@ def copy(x):
|
|||||||
return _reconstruct(x, None, *rv)
|
return _reconstruct(x, None, *rv)
|
||||||
|
|
||||||
|
|
||||||
_copy_atomic_types = {types.NoneType, int, float, bool, complex, str, tuple,
|
_copy_atomic_types = frozenset({types.NoneType, int, float, bool, complex, str, tuple,
|
||||||
bytes, frozenset, type, range, slice, property,
|
bytes, frozenset, type, range, slice, property,
|
||||||
types.BuiltinFunctionType, types.EllipsisType,
|
types.BuiltinFunctionType, types.EllipsisType,
|
||||||
types.NotImplementedType, types.FunctionType, types.CodeType,
|
types.NotImplementedType, types.FunctionType, types.CodeType,
|
||||||
weakref.ref, super}
|
weakref.ref, super})
|
||||||
_copy_builtin_containers = {list, dict, set, bytearray}
|
_copy_builtin_containers = frozenset({list, dict, set, bytearray})
|
||||||
|
|
||||||
def deepcopy(x, memo=None, _nil=[]):
|
def deepcopy(x, memo=None):
|
||||||
"""Deep copy operation on arbitrary Python objects.
|
"""Deep copy operation on arbitrary Python objects.
|
||||||
|
|
||||||
See the module's __doc__ string for more info.
|
See the module's __doc__ string for more info.
|
||||||
@@ -122,8 +122,8 @@ def deepcopy(x, memo=None, _nil=[]):
|
|||||||
if memo is None:
|
if memo is None:
|
||||||
memo = {}
|
memo = {}
|
||||||
else:
|
else:
|
||||||
y = memo.get(d, _nil)
|
y = memo.get(d, None)
|
||||||
if y is not _nil:
|
if y is not None:
|
||||||
return y
|
return y
|
||||||
|
|
||||||
copier = _deepcopy_dispatch.get(cls)
|
copier = _deepcopy_dispatch.get(cls)
|
||||||
@@ -162,9 +162,9 @@ def deepcopy(x, memo=None, _nil=[]):
|
|||||||
_keep_alive(x, memo) # Make sure x lives at least as long as d
|
_keep_alive(x, memo) # Make sure x lives at least as long as d
|
||||||
return y
|
return y
|
||||||
|
|
||||||
_atomic_types = {types.NoneType, types.EllipsisType, types.NotImplementedType,
|
_atomic_types = frozenset({types.NoneType, types.EllipsisType, types.NotImplementedType,
|
||||||
int, float, bool, complex, bytes, str, types.CodeType, type, range,
|
int, float, bool, complex, bytes, str, types.CodeType, type, range,
|
||||||
types.BuiltinFunctionType, types.FunctionType, weakref.ref, property}
|
types.BuiltinFunctionType, types.FunctionType, weakref.ref, property})
|
||||||
|
|
||||||
_deepcopy_dispatch = d = {}
|
_deepcopy_dispatch = d = {}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Improve the scaling of :func:`copy.copy` and :func:`copy.deepcopy` in the free-threading build.
|
||||||
Reference in New Issue
Block a user