python:追加到列表中对象的列表

时间:2018-08-20 17:24:00

标签: python python-3.x

我对python中的列表一无所知。

class Foo:
    vals=[]
    id=-1
    j=-1
    def __init__(self,ID):
        self.id=ID

foos=[]
for i in range(10):
    foos.append(Foo(i))

for j in range(15):
    for f in foos:
        if f.id == j:
           f.vals.append(j)
           f.j=j
           break

for f in foos:
    print(str(f.j)+" "+str(f.vals))

输出为:

0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

为什么输出不像:

0 [0] 
1 [1] 
...

或者我需要更改以获得该输出?

谢谢。

1 个答案:

答案 0 :(得分:2)

您正在创建“类变量”。这意味着该var在该类的所有实例之间共享。

您希望您的var属于类Foo的每个实例,因此您应该通过在__init__内定义它们来创建“实例变量”。

class Foo:
    def __init__(self,ID):
        self.id=ID
        self.vals=[]
        self.j=-1

输出:

0 [0]
1 [1]
2 [2]
3 [3]
4 [4]
5 [5]
6 [6]
7 [7]
8 [8]
9 [9]

您会看到一个working example on repl.it

您会看到一个good explanation on Digital Ocean