我正在尋找一個包含類對象列表的類對象的深層副本,每個類都有自己的一套東西。這些對象不包含任何比整數和列表更令人興奮的東西(沒有字母,沒有發生器等待屈服等)。我正在循環執行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
沒有奏效。
任何想法如何有效地深度複製乘法嵌套的Python對象而不使用copy.deepcopy?
您可能想要考慮如何將數據項存儲爲基元(例如整數和字符串)而不是Python對象。複製這些會更有效率。也許數組模塊甚至是cython語言都會有用。 –