python - 函数内的列表赋值

时间:2013-03-02 23:14:41

标签: python class variable-assignment

我是Python新手,我正在尝试使用函数将元素添加到对象拥有列表中。 这是我的代码的简化版本:

class TElement:
    vec = []

class GTop:

    ElList = []

    def AddElement(self, vect):
        NewEl = TElement() 
        for i in range(len(vect)): 
            NewEl.vec.append(vect[i])

        self.ElList.append(NewEl)


myvec1 = ["a",1,2,"b"]
myvec2 = ["a","c",2,"b"]

Mytop = GTop()

Mytop.AddElement(myvec1)

Mytop.AddElement(myvec2)

使用上面的代码我得到:

Mytop.ElList [0] .vec = ['a',1,2,'b']

Mytop.ElList [1] .vec = ['a',1,2,'b','a','c',2,'b']

虽然我想:

Mytop.ElList [0] .vec = ['a',1,2,'b']

Mytop.ElList [1] .vec = ['a','c',2,'b']

出于某种原因,当我退出AddElement函数时,NewEl没有被删除。 你能澄清一下我做错了什么吗? 感谢。

1 个答案:

答案 0 :(得分:2)

如果您更改此TElement,则应获得预期的输出:

class TElement:
    def __init__(self):
        self.vec = []

正如@delnan在评论中指出的那样,阅读其他答案,它解释得很清楚。

Why do attribute references act like this with Python inheritance?