我正在寻找一个包含类对象列表的类对象的深层副本,每个类对象都有自己的一组内容。这些对象不包含任何比整数和列表更令人兴奋的东西(没有字典,没有等待生成的生成器等)。我正在一个循环中对 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
Run Code Online (Sandbox Code Playgroud)
由于我对对象执行的操作,我无法浅复制。我需要新变量拥有的内容:
> 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]
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的方法,例如使用 json 序列化和重新加载数据,但在我的测试中它还不够快,因为我每次都必须重新分配所有变量。self.__dict__ = dct由于嵌套的对象,我试图实现聪明的尝试并没有成功。
关于如何在不使用 copy.deepcopy 的情况下有效地深度复制多重嵌套 Python 对象的任何想法?
首先要查找的事情之一copy.deepcopy是对象是否定义了自己的__deepcopy__方法,因此不必让它每次都定义自己的过程来弄清楚如何复制对象。
这需要您有一种方法来定义一个Base没有任何随机元素的对象供副本使用,但是如果您可以找到一种更有效的复制对象的过程,您应该将其定义为一种__deepcopy__加快复制过程的方法。
| 归档时间: |
|
| 查看次数: |
9080 次 |
| 最近记录: |