2010-08-25 57 views
0

对不起,如果标题不是很清楚。我不确定适当的标题。让我解释我需要什么。我应该复制一个类的实例来实现这个吗?如果是的话,我该怎么做?

我正在做一个模拟的多个运行,其中每个运行对应一个不同的种子。但是,我希望类的实例的起始特性在不同的运行中保持不变。例如,考虑一个城市中的人员类别。在下面的代码中,命令city = people()创建人员对象,每个对象都有一些财富是从分配中随机选择的。让F(。)成为人口中财富的实现初始分配。随着模拟的一次特定运行,事物在人口中发生变化,并且人物对象的各种属性得到更新。例如,一个人的收入变化。这些属性的最终值取决于模拟运行期间发生的一些随机实现。现在我想用一个不同的随机种子来再次运行模拟,在运行开始之前,所有属性都重置为它们的初始值(包括随机确定的财富分布)。我应该做一个浅拷贝还是一个deepCopy?还有第三种方式更好吗?

谢谢了。

city = people() 

for seedValue in ListOfSeeds: 

    cityThisInstance = city.copy() 

    cityThisInstance.someAttribute = xxxxx 
    cityThisInstance.anotherAttribute = yyyyy 

    Rest of the code 

回答

2

据我了解,你总是希望你的初始条件(例如的city状态之前,你甚至得到你的循环)是相同的。如果是这样的话,我宁愿只要在循环中运行就重新初始化类,因为它更清晰。

initargs = 21, 50000 
initkwargs = {car: 'blue', make: 'mazda'} 

for loop: 
    cityThisInstance = people(*initargs, **initkwargs) 

如果当你初始化代码一些显著量运行类,可能会更好简单地复制它的状态。深度复制将是首选,所以它使用的所有变量将被复制,尤其是可变的,而不是指向原始位置。

import copy 

for loop: 
    cityThisInstance = copy.deepcopy(city) 
+0

谢谢尼克。由于初始状态具有一些使用random.uniform函数确定的变量,因此我无法重新初始化该类。如果我使用您建议的第一种方法重新初始化,这些值将会改变。但第二个应该工作。我会尝试。谢谢。 – Curious2learn 2010-08-25 01:03:33

相关问题