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

よりPython的な方法は、オブジェクトを変更する関数を作成することですが、元のオブジェクトを変更せず、変更された形式を返すだけです。しかし、あなたが投稿したこのコードから、実際に何をしようとしているのかは明確ではありません。何をしようとしているのか、より単純な (一般的な) 例を作成する必要があります。

Pythonのオブジェクトは、クラス、インスタンス、辞書、リスト、タプル、「a」など、何でも意味するため.

オブジェクトをコピーするのはちょっとわかりません...正しく理解できれば、クラスのインスタンスをコピーすることを意味します

したがって、そのクラスのインスタンスを 1 つ受け取る関数を作成し、その関数で別のインスタンスを作成し、必要なすべての属性をコピーします。

于 2013-05-23T10:45:14.167 に答える