Должен ли я сделать копию экземпляра класса для достижения этой цели?Если да, то как мне это сделать? - PullRequest
0 голосов
/ 25 августа 2010

Извините, если название не очень понятно.Я не был уверен насчет подходящего названия.Позвольте мне объяснить, что мне нужно.

Я выполняю несколько прогонов симуляции, где каждый прогон соответствует разному начальному числу.Однако я хочу, чтобы начальные характеристики экземпляров класса оставались одинаковыми при разных прогонах.Например, рассмотрим класс людей в городе.В приведенном ниже коде команда 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 Ответ

2 голосов
/ 25 августа 2010

Насколько я понимаю, вы всегда хотите, чтобы ваши начальные условия (например, состояние city еще до того, как вы добрались до своего цикла) были одинаковыми.Если это так, я бы предпочел просто повторно инициализировать класс всякий раз, когда вы выполняете цикл, поскольку это намного понятнее.

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

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

Если при инициализации класса выполняется значительное количество кода, это может бытьлучше просто скопировать это состояние.Глубокая копия предпочтительнее, так что все переменные, которые она использует, будут скопированы, особенно изменчивые, а не будут указывать, где находятся оригиналы.

import copy

for loop:
    cityThisInstance = copy.deepcopy(city)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...