gpt4 book ai didi

Python deepcopy ..有点

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

是否可以仅深拷贝特定类型的对象,例如列表、字典或元组

示例:[[1, <SomeObj>], <OtherObj>]

我想深度复制第一个列表(当然还有.. 1),但不是SomeObjOtherObj .那些应该作为引用。

是否可以使用一些我不熟悉的函数来做到这一点,或者我是否必须编写自己的函数?...

最佳答案

您可以使用 copy.deepcopy 非常轻松地完成此操作,方法是在您需要它的每个类中重写 __deepcopy__ 方法。如果您想要不同的复制行为,具体取决于这种情况,你可以在运行时设置 __deepcopy__ 函数然后重置它:

import copy
class OtherObject(object):
pass

l = [[1, 2, 3], [4, 5, 6], OtherObject()]
# first, save the old deepcopy if there is one
old_deepcopy = None
if hasattr(OtherObject, __deepcopy__):
old_deepcopy = OtherObject.__deepcopy__

# do a shallow copy instead of deepcopy
OtherObject.__deepcopy__ = lambda self, memo: self
l2 = copy.deepcopy(l)
# and now you can replace the original behavior
if old_deepcopy is not None:
OtherObject.__deepcopy__ = old_deepcopy
else:
del OtherObject.__deepcopy__

>>> l[0] is l2[0]
False
>>> l[1] is l2[1]
False
>>> l[2] is l2[2]
True

关于Python deepcopy ..有点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859774/

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