2010-08-25 60 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

相關問題