Python,如何以一种高效的方式复制一个对象,从而允许对其进行修改?
在我的Python代码中,我有以下问题:我必须多次复制同一个对象,然后将每个副本传递给修改它的函数。我尝试了copy.deepcopy,但它的计算成本非常高,然后我尝试了itertools.repeat(),但这是个坏主意,因为在那之后我必须修改对象。所以我写了一个简单的方法,复制一个对象,只需返回一个具有相同属性的新对象:Python,如何以一种高效的方式复制一个对象,从而允许对其进行修改?,python,copy,Python,Copy,在我的Python代码中,我有以下问题:我必须多次复制同一个对象,然后将每个副本传递给修改它的函数。我尝试了copy.deepcopy,但它的计算成本非常高,然后我尝试了itertools.repeat(),但这是个坏主意,因为在那之后我必须修改对象。所以我写了一个简单的方法,复制一个对象,只需返回一个具有相同属性的新对象: def myCopy(myObj): return MyClass(myObj.x, myObj.y) 问题是,这真的是不够的:我必须使它减少6000次,它需要超
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”等等 复制对象有点不清楚。。。 你的意思是复制一个类的实例,如果我理解正确的话
因此,编写一个函数来获取该类的一个实例,在该函数中创建另一个实例并复制您需要的所有属性。该副本是一直被修改的还是偶尔被修改的?您要复制的对象是什么?显示一些代码。你不能将初始对象传递给修改函数并将结果附加到列表中吗?你会得到一个包含所有对象的列表。副本总是被修改的。很抱歉,你的代码没有多大意义。也许你应该从解释你想要达到的目标开始。。。