2011-11-22 56 views
1

我有一些將永遠存儲在內存中的對象,將有成千上萬的實例,所以有效地使用內存很重要。什麼是更有效率?函數定義中的類定義或字典中的字典?

這個對象會使用一些字典,如:

{ 
'text':doSomething, 
'string':doAnotherThing, 
'int':doSomethingCrazy 
} 

我當然可以把它OUT之類的,在模塊級,所以它肯定會被存儲在內存中只有一次,但我更喜歡把東西放在一起,所以如果僅在該類中使用它,如果它保存在類中,看起來會更好。

問題是,如果我把字典放到類定義中,它會只存儲在內存中一次嗎?

class MyClass(object): 
    thatDict={} 

或者將它存儲在內存中只有一次,如果我把它放在函數定義中?

class MyClass(object): 
    def someFunc():  
     thatDict={} 

回答

6

如果你把它放在一個函數中,每次函數被調用時都會重新創建字典。這是一個有點浪費,尤其是字典大:

class MyClass(object): 
    def someFunc():  
     thatDict={} # recreated every function call 

如果你把它放在一個類的定義,它是創建一次:加載模塊時。

class MyClass(object): 
    thatDict={} # Only one copy 

你也可以得到同樣的效果文件範圍內創建:

thatDict={} # Only one copy 
class MyClass(object): 
    ... 
+0

那麼,如果我在一個實例編輯字典發生,它會創建它的副本,而沒有進行的編輯使用基本一? – Tigra

+0

正如我所說,只有一個副本。如果您編輯它,另一個副本不會出現。 –

+0

對我來說似乎很陌生,如果你有obj1和obj2。並且在obj1,obj2中編輯self.thatdict不應該看到這種變化。所以我想,當你通過MyClass.thatdict進行編輯時,確實只有一個副本。但是,如果你通過self.thatdict編輯另一個副本創建。因此,這是基於假設,在第一次編輯之前不創建對象創建副本... – Tigra