很抱歉,如果标题不是很清楚。我不确定合适的头衔。让我解释一下我需要什么。
我正在进行多次模拟运行,其中每次运行对应不同的种子。但是,我希望类的实例的起始特性在不同的运行中保持相同。例如,考虑一个城市中的人群。在下面的代码中,命令city = people()
创建了人物对象,每个人都有一些从分布中随机选择的财富。设F(。)是人口中实现的财富初始分配。随着模拟的一个特定运行,人口中的事物发生变化,人物对象的各种属性得到更新。例如,一个人的收入会发生变化。这些属性的最终值取决于模拟运行期间发生的一些随机实现。现在我想再次使用不同的随机种子运行模拟,在运行开始之前,所有属性都会重置为其初始值(包括随机确定的财富分布)。我应该制作shallowCopy还是deepCopy?还有第三种方式更好吗?
非常感谢。
city = people()
for seedValue in ListOfSeeds:
cityThisInstance = city.copy()
cityThisInstance.someAttribute = xxxxx
cityThisInstance.anotherAttribute = yyyyy
Rest of the code
答案 0 :(得分:2)
根据我的理解,您总是希望您的初始条件(例如,在您进入循环之前city
的状态)是相同的。如果是这种情况,我希望只要你在循环中运行就重新初始化类,因为它更清晰。
initargs = 21, 50000
initkwargs = {car: 'blue', make: 'mazda'}
for loop:
cityThisInstance = people(*initargs, **initkwargs)
如果每次初始化类时会运行大量代码,那么简单地复制它的状态可能会更好。 Deepcopy将是首选,因此它将使用它所使用的所有变量,特别是可变,而不是指向原始位置。
import copy
for loop:
cityThisInstance = copy.deepcopy(city)