1

在我的 Python 代码中,我有以下问题:我必须多次复制同一个对象,然后将每个副本传递给修改它的函数。我尝试使用 copy.deepcopy,但它的计算成本确实很高,然后我尝试使用 itertools.repeat(),但这是一个坏主意,因为在那之后我必须修改对象。所以我写了一个简单的方法来复制一个对象,简单地返回一个具有相同属性的新对象:

def myCopy(myObj):
    return MyClass(myObj.x, myObj.y)

问题是这也太低效了:我要做大约 6000 次,而且需要 10 多秒!那么,是否存在更好的方法来做到这一点?

要复制和修改的对象是表,它是这样创建的:

def initialState(self):
    table = []
    [table.append(Events()) for _ in xrange(self.numSlots)] 
    for ei in xrange(self.numEvents - 1):
        ei += 1
        enr = self.exams[ei]
        k = random.randint(0, self.numSlots - 1)
        table[k].Insert(ei, enr)
    x = EtState(table)
    return x

class Event:

    def __init__(self, i, enrollment, contribution = None):
        self.ei = i
        self.enrollment = enrollment
        self.contribution = contribution



class Events:

    def __init__(self):
        self.count = 0
        self.EventList = []

    def getEvent(self, i):
        return self.EventList[i].ei


    def getEnrollment(self, i):
        return self.EventList[i].enrollment

    def Insert(self, ei, enroll = 1, contribution = None):
        self.EventList.append(Event(ei, enroll, contribution))
        self.count += 1

    def eventIn(self, ei):
        for x in xrange(self.count):
            if(self.EventList[x].ei == ei):
                self.EventList[x].enrollment += 1
                return True
        return False
4

1 回答 1

0

更 Pythonic 的方法是创建修改对象的函数,但不修改原始对象,只返回其修改后的形式。但是从你发布的这段代码中,不清楚你到底想做什么,你应该做一个更简单(通用)的例子来说明你想做什么。

由于 Python 中的 Object 意味着任何东西,类、实例、字典、列表、元组、'a' 等。

复制对象有点不清楚......如果我理解正确,你的意思是复制一个类的实例

因此,编写一个函数,该函数采用该类的一个实例,在该函数中创建另一个实例并复制您需要的所有属性..

于 2013-05-23T10:45:14.167 回答