2016-11-07 77 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' –