2016-11-07 73 views
0

名單我在蟒蛇是新的, 我想和結構化列表的工作:結構與Python

class X_ItemSet:    # Structure of an Item 
    Item = [] 
    ItemTID = [] 

oneItem = X_ItemSet    #one instance of X_ItemSet 
ListTID = [X_ItemSet]   #Liste of X_ItemSet 

oneItem.Item.append(1) 
oneItem.ItemTID.append("a") 

ListTID.append(oneItem) 
del oneItem[:] 

我的問題是刪除oneItem時也ListTID將是空的 我應該怎麼做,以保持值ListTID刪除oneItem時?

+0

Python通過引用傳遞事物,因此當您刪除oneItem時,它會從包括您的列表在內的任何地方消失。通常,您不應該刪除變量並讓GC處理事情。你爲什麼要明確地刪除它呢? –

+0

我試着運行你的代碼,並在最後一行得到'TypeError:'type'對象不支持項目刪除'。如果我將其更改爲「del oneItem」,則「ListTID」仍包含值。你確定這個確切的代碼是否導致ListTID爲空? – Kevin

+0

您尚未創建'X_ItemSet'的單個實例。 'oneItem = X_ItemSet'和'ListTID = [X_ItemSet]'都不會創建一個實例。你在那裏使用實際的類對象,'Item'和'ItemTID'是類變量而不是實例變量。 – user2357112

回答

-1

您正在向列表中添加一個類,從而爲其添加引用。您可能需要創建該對象的新副本並添加它

oneItemCopy = copy.deepcopy(oneItem) 
ListTID.append(oneItemCopy) 
del oneItem[:] 

請查看以下頁面以獲取有關複製操作的更多信息。 https://docs.python.org/2/library/copy.html

+0

這些列表不是實例變量,而是類變量。 –

+0

我有:NameError:未定義名稱'copy' – TarguiDZ

+0

@TarguiDZ:您必須先導入複製模塊作爲'import copy' –