我应该复制一个类的实例来实现这个目的吗?如果是,我该怎么办?

时间:2010-08-25 00:29:07

标签: python class copy

很抱歉,如果标题不是很清楚。我不确定合适的头衔。让我解释一下我需要什么。

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

非常感谢。

city = people()

for seedValue in ListOfSeeds:

    cityThisInstance = city.copy()

    cityThisInstance.someAttribute = xxxxx
    cityThisInstance.anotherAttribute = yyyyy

    Rest of the code

1 个答案:

答案 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)