Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,如何以一种高效的方式复制一个对象,从而允许对其进行修改?_Python_Copy - Fatal编程技术网

Python,如何以一种高效的方式复制一个对象,从而允许对其进行修改?

Python,如何以一种高效的方式复制一个对象,从而允许对其进行修改?,python,copy,Python,Copy,在我的Python代码中,我有以下问题:我必须多次复制同一个对象,然后将每个副本传递给修改它的函数。我尝试了copy.deepcopy,但它的计算成本非常高,然后我尝试了itertools.repeat(),但这是个坏主意,因为在那之后我必须修改对象。所以我写了一个简单的方法,复制一个对象,只需返回一个具有相同属性的新对象: def myCopy(myObj): return MyClass(myObj.x, myObj.y) 问题是,这真的是不够的:我必须使它减少6000次,它需要超

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

def myCopy(myObj):
    return MyClass(myObj.x, myObj.y)
问题是,这真的是不够的:我必须使它减少6000次,它需要超过10秒!那么,有没有更好的方法

要复制和修改的对象是table,其创建方式如下:

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

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

因为对象在Python中意味着任何东西,类、实例、dict、list、tuple、“a”等等

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


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

该副本是一直被修改的还是偶尔被修改的?您要复制的对象是什么?显示一些代码。你不能将初始对象传递给修改函数并将结果附加到列表中吗?你会得到一个包含所有对象的列表。副本总是被修改的。很抱歉,你的代码没有多大意义。也许你应该从解释你想要达到的目标开始。。。