【发布时间】:2016-08-18 23:25:19
【问题描述】:
我正在寻找一个包含类对象列表的类对象的深层副本,每个类对象都有自己的一组东西。这些对象不包含比整数和列表更令人兴奋的东西(没有字典,没有等待产生的生成器等)。我在一个循环中对 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 对象的任何想法?
【问题讨论】:
-
您可能想考虑将数据项存储为基元(例如整数和字符串)而不是 Python 对象的方法。复制这些会更有效率。也许数组模块甚至 cython 语言会很有用。
标签: python python-3.x