2015-09-18 23 views
3

碰到一個讓我困惑的編程問題。 林解析數據和:刪除列表時Python意外(對我來說)行爲

  • 各有關塊添加到列表1 ,追加列表1至final_list。 (爲了便於整潔未來表現)
  • 對於未來相關一塊,我刪除了「舊」信息列表1中帶* list1的信息[:] = []
  • 追加新的新鮮信息列表1,追加list1到final_list和voilà...我認爲:)

所有幫助讚賞!

實施例:

final_list=[] 
list1 = [1,2,3,4] 
list2 = [5,6,7,8] 

final_list.append(list1) 
final_list.append(list2) 
print final_list 

list1[:] = [] 
print final_list 

實施例輸出

[[1, 2, 3, 4], [5, 6, 7, 8]] 
[[], [5, 6, 7, 8]] 

內容sys.version

Python: 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] 
+0

你好,歡迎來到StackOverflow。請花一些時間閱讀幫助頁面,尤其是名爲[「我可以詢問什麼主題?」(http://stackoverflow.com/help/on-topic)和[「我應該問什麼類型的問題避免問?「](http://stackoverflow.com/help/dont-ask)。更重要的是,請閱讀[Stack Overflow問題清單](http://meta.stackexchange.com/q/156810/204922)。您可能還想了解[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+0

你預計會發生什麼? –

+0

我不知道爲什麼這讓你感到驚訝。你能解釋一下你期望看到什麼嗎? –

回答

1

通過調用list1[:] = [],你改變一切list1隨處可見的前值,即使在final_list。要保留final_list中的list1值,您應制作副本並追加副本,而不是原始列表。列表複製的一些解釋和很好的方法可以在here找到。

+0

歡呼drali,豎起大拇指! – Fredrik

1

我刪除了「舊」信息列表1中帶*列表1 [:] = []

所以,list1將是你在final_list引用同一個對象。

final_list簡直就是[list1, list2]。因此輸出。

如果你想有一個新的對象,重新分配變量:

list1 = [] 
1

許多社區讀者指出,final_list中的對象只是指向原始對象「list1」和「list2」的指針。最後,我用方法final_list.append(list(list1))來存儲list1的值在final_list中。 (作爲副本)之後,它可以安全地重置list1並重復該過程。