PythonLXML:读取重复元素并存储在列表中的奇怪问题

PythonLXML:读取重复元素并存储在列表中的奇怪问题,python,xml,parsing,list,lxml,Python,Xml,Parsing,List,Lxml,我遇到了一个奇怪的问题。我有两个非常不同的代码版本来解决相同的问题,并且遇到了相同的问题 我将问题简化为: 以下是xml文件: <Test> <Object name="Ob1"> <List/> </Object> <Object name="Ob2"> <List> <item>One</item> <item>Two</item> <

我遇到了一个奇怪的问题。我有两个非常不同的代码版本来解决相同的问题,并且遇到了相同的问题

我将问题简化为:

以下是xml文件:

<Test>
 <Object name="Ob1">
  <List/>
 </Object>

 <Object name="Ob2">
  <List>
   <item>One</item>
   <item>Two</item>
  </List>
 </Object>

 <Object name="Ob3">
  <List>
   <item>Three</item>
   <item>Four</item>
   <item>Five</item>
  </List>
 </Object>
</Test>
代码应该将列表中的所有
元素存储在对象中,对象本身存储在列表中

然而,以下是我得到的结果:

Ob1
['One', 'Two', 'Three', 'Four', 'Five']
Ob2
['One', 'Two', 'Three', 'Four', 'Five']
Ob3
['One', 'Two', 'Three', 'Four', 'Five']

为什么它要获取整个文档中的所有
元素?

TestClass.list是一个类级属性,因此每个
对象\u list.append()
都发生在同一个列表上

例如:

class Foo(object):
    lst = []

f1 = Foo()
f1.lst.append(1)
f2 = Foo()
f2.lst.append(2)
print f1.lst
print f2.lst

[1, 2]
[1, 2]
您应该将其设置为实例级属性

class Bar(object):
    def __init__(self):
        self.lst = []

b1 = Bar()
b1.lst.append(1)
b2 = Bar()
b2.lst.append(2)
print b1.lst
print b2.lst

[1]
[2]

作为记录,这是一个复杂得多的程序中的问题,但我似乎已将问题缩小到.append语句。只是一个想法。所以基本上,列表[]对于每个对象都是相同的?不是每个对象都有一个新的吗?是的,它是在类级别分配的单个
[]
。上面的第二个语法(条)将为TestClass的每个实例提供一个新列表。
class Bar(object):
    def __init__(self):
        self.lst = []

b1 = Bar()
b1.lst.append(1)
b2 = Bar()
b2.lst.append(2)
print b1.lst
print b2.lst

[1]
[2]