我來自C++背景,經常使用靜態變量減少時間變量必須初始化的次數(特別是初始化需要很長時間時)。Python - 靜態類變量
class MyClass(object):
StaticList1 = [...] # Very large list
StaticList2 = [...] # Very large list
現在,這是好的,如果存在的MyClass至少1個實例整個程序的執行和列表只能創建一次:所以從StackOverflow上其他的帖子,人們使用靜態類變量如下建議。但是,如果在執行的某個階段沒有MyClass的實例,Python似乎刪除了靜態列表(我假設,因爲參考計數器下降到0)。
所以我的問題,有沒有簡單的方法,沒有使用外部模塊來初始化StaticList1和StaticList2一次(他們第一次使用),並永遠不會刪除他們,即使沒有MyClass的實例,直到該程序存在(或者您手動刪除列表)?
編輯:
也許我過分簡化了這個問題。我在做什麼:
class MyClass(object):
StaticList = None
def __init__(self, info):
if self.StaticList == None:
print "Initializing ..."
self.StaticList = []
# Computationally expensive task to add elements to self.StaticList, depending on the value of parameter info
def data(self):
return self.StaticList
我從另一個腳本導入模塊,並有一個循環是這樣的:
import myclass
for i in range(10000):
m = myclass.MyClass(i)
d = m.data()
# Do something with d.
靜態列表的初始化大約需要200 - 300毫秒,在執行上循環的每一次迭代,因此循環需要非常長的時間才能完成。
你可以利用模塊是單身的事實,所以如果你創建這些模塊級別的成員,只要模塊被導入並且只存在一次,它們就會一直存在。 –
這聽起來不錯,我不希望那些名單去任何地方。 你在說你正在調用'MyClass.StaticList1 ...',你得到一個錯誤?你遇到了什麼錯誤? – gbtimmon
*但是,如果在執行的某個階段沒有MyClass的實例,Python似乎刪除了靜態列表* AFAIK,這是錯誤的。該類將獨立存在於該類的對象中,並且在類級別定義的所有屬性將通過該類繼續存在。你能舉一個你的問題的例子嗎? –