gpt4 book ai didi

python - deepcopy 是否使用写时复制?

转载 作者:太空狗 更新时间:2023-10-30 00:30:30 24 4
gpt4 key购买 nike

我想知道 python 解释器在对可变对象进行深度复制时是否应用写时复制策略。

此外,我想知道深度复制是否也在非可变对象上执行(不过这对我来说似乎很奇怪)

最佳答案

它不进行写时复制。

它不会对一些内置的不可变类型进行深度复制,但任何用户定义的“不可变”类型都将被深度复制。

copy.py in the Python 2.7 standard library在其文档中包含此消息:

This version does not copy types like module, class, function, method, nor stack trace, stack frame, nor file, socket, window, nor array, nor any similar types.

copy 像这样处理不可变对象(immutable对象):

def _copy_immutable(x):
return x
for t in (type(None), int, long, float, bool, str, tuple,
frozenset, type, xrange, types.ClassType,
types.BuiltinFunctionType, type(Ellipsis),
types.FunctionType, weakref.ref):
d[t] = _copy_immutable
for name in ("ComplexType", "UnicodeType", "CodeType"):
t = getattr(types, name, None)
if t is not None:
d[t] = _copy_immutable

deepcopy 使用了一个更复杂的方案,该方案太长而无法复制到这个 most 中,但要点是相同的。一个有趣的地方是 _deepcopy_tuple 遍历它的元素并且在找到被复制的元素之前不创建新对象。

for i in range(len(x)):
if x[i] is not y[i]:
y = tuple(y)
break
else:
y = x

关于python - deepcopy 是否使用写时复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com