2015-10-22 140 views
0

我有一個ID列表,我從數據庫插入中獲得,發送到其他模塊中的其他函數。我有一個主模塊說asd.py,我想分享一個列表ID_LIST與其他兩個模塊的功能:foo.pybar.py。這是一個簡單:Web2py - 在模塊之間共享列表

在asd.py

def asd(): 
    id_list = list() 
    # Some insertion then append id_list 
    foo.f1(id_list) 
    bar.f1(id_list) 

我的問題是ID_LIST是按值或引用複製,假設這是一個非常大名單。這種方法「性能明智」嗎?

謝謝。

+1

性能方面,您可能需要[將內存緩存](http://web2py.com/books/default/chapter/29/04/the-core#cache),並避免在列表不存在時加載列表用過的。也許並非控制器中的所有功能都需要您的列表。在這種情況下,您可以嘗試[條件模塊](http://www.web2py.com/books/default/chapter/29/04#markmin_conditional_models),或者簡單地按需加載數據。希望這有助於回答你問題的第二部分。 – Remco

+0

@Remco謝謝你,我沒有看着他們。 – TheSoulkiller

+0

@Remco:這些是條件*模型*,不是模塊。 –

回答

2

Id_list被引用複製,雖然可變對象在這方面是一個奇怪的邊緣情況。如果foo.f1呼叫執行id_list = 7asd函數中id_list的副本不會更改。但是,如果foo.f1調用id_list.append(9),9將在asd函數調用中出現在id_list的末尾。沒有隱式複製列表。

+0

謝謝@ppperry,我不更改列表,只是通過列表通知其他模塊。 – TheSoulkiller