如何在Python中将唯一对象添加到列表中

如何在Python中将唯一对象添加到列表中,python,Python,我试图将对象添加到列表中,但当我打印该列表的元素时,会得到最后一个对象的属性 import random class Unit: arr = [] def __init__(self): self.arr.clear() for i in range(2): self.arr.append(random.randint(1, 100)) print("arr in Unit ", self.ar

我试图将对象添加到列表中,但当我打印该列表的元素时,会得到最后一个对象的属性

import random


class Unit:
    arr = []

    def __init__(self):
        self.arr.clear()
        for i in range(2):
            self.arr.append(random.randint(1, 100))
            print("arr in Unit ", self.arr)

class SetOfUnits:

    lst = []

    def __init__(self):
        self.lst.clear()
        for i in range(3):
            self.lst.append(Unit())
            print("arr in SetOfUnits ", self.lst[i].arr)


p = SetOfUnits()

for i in range(3):
    print(p.lst[i].arr)
我明白了:

arr in Unit  [17, 16]
arr in SetOfUnits  [17, 16]
arr in Unit  [98, 20]
arr in SetOfUnits  [98, 20]
arr in Unit  [16, 39]
arr in SetOfUnits  [16, 39]
[16, 39]
[16, 39]
[16, 39]
问题在于最后3行。看起来对象p.lst[0],p.lst[1],p.lst[2]指的是同一个对象,而不是不同的对象。 我想得到:

[17, 16]
[98, 20]
[16, 39]

你能帮我找出我做错了什么吗?

\uuuu init\uuu
函数中定义你的列表

class Unit:

    def __init__(self):
        self.arr = []
        self.arr.clear()
        for i in range(2):
            self.arr.append(random.randint(1, 100))
            print("arr in Unit ", self.arr)

class SetOfUnits:

    def __init__(self):
        self.lst = []
        self.lst.clear()
        for i in range(3):
            self.lst.append(Unit())
            print("arr in SetOfUnits ", self.lst[i].arr)
按照这样做的方式,在类方面定义变量,需要实例方面的变量


请参阅:

\uuuu init\uu
函数中定义列表

class Unit:

    def __init__(self):
        self.arr = []
        self.arr.clear()
        for i in range(2):
            self.arr.append(random.randint(1, 100))
            print("arr in Unit ", self.arr)

class SetOfUnits:

    def __init__(self):
        self.lst = []
        self.lst.clear()
        for i in range(3):
            self.lst.append(Unit())
            print("arr in SetOfUnits ", self.lst[i].arr)
按照这样做的方式,在类方面定义变量,需要实例方面的变量


请参阅:

lst
arr
是类属性,而不是实例属性。

lst
arr
是类属性,而不是实例属性