gpt4 book ai didi

python - 复制嵌套的自定义对象 : alternatives to deepcopy

转载 作者:行者123 更新时间:2023-12-04 00:06:53 29 4
gpt4 key购买 nike

我希望制作包含类对象列表的类对象的深拷贝,每个类对象都有自己的一组内容。对象不包含比整数和列表更令人兴奋的东西(没有字典,没有等待生成的生成器等)。我在一个循环中对 500-800 个对象执行深度复制,这确实减慢了程序的运行速度。我意识到这已经是低效的;目前无法更改。

它的外观示例:

import random
import copy

class Base:
def __init__(self, minimum, maximum, length):
self.minimum = minimum
self.maximum = maximum
self.numbers = [random.randint(minimum, maximum) for _ in range(length)]
# etc

class Next:
def __init__(self, minimum, maximum, length, quantity):
self.minimum = minimum
self.maximum = maximum
self.bases = [Base(minimum, maximum, length) for _ in range(quantity)]
# etc

由于我对对象执行的操作,我无法进行浅拷贝。我需要新变量拥有的内容:
> first = Next(0, 10, 5, 10)
> second = first
> first.bases[0].numbers[1] = 4
> print(first.bases[0].numbers)
> [2, 4, 3, 3, 8]
> print(second.bases[0].numbers)
> [2, 4, 3, 3, 8]
>
> first = Next(0, 10, 5, 10)
> second = copy.deepcopy(first)
> first.bases[0].numbers[1] = 4
> print(first.bases[0].numbers)
> [8, 4, 7, 9, 9]
> print(second.bases[0].numbers)
> [8, 11, 7, 9, 9]

我尝试了几种不同的方法,例如使用 json 来序列化和重新加载数据,但在我的测试中,它的速度还不够快,因为我每次都被困在重新分配所有变量。我试图完成一个聪明的尝试 self.__dict__ = dct由于嵌套对象,没有工作。

关于如何在不使用 copy.deepcopy 的情况下有效地深度复制多重嵌套 Python 对象的任何想法?

最佳答案

基于珍惜的回答 here , pickle.loads(pickle.dumps(first))每次通话的工作速度大约是其两倍。我最初因为测试时出现了一个无关的错误而将其注销,但在重新测试时,它在我的需求范围内表现良好。

关于python - 复制嵌套的自定义对象 : alternatives to deepcopy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028978/

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