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

python:附加到列表中的对象中的列表,python,python-3.x,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)

我不懂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] 
...
或者我必须改变什么才能得到这个输出


谢谢。

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

您希望您的变量属于类
Foo
的每个实例,因此您应该通过在
\uuuu init\uuuu
中定义它们来创建“实例变量”

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]
你可以看到一个


您可以看到一个.

,因为您将
vals
设置为类的所有实例共享的类属性,而不是实例属性。因此,每个实例都
附加到同一个共享列表中。您的问题不清楚。首先,一旦您跟踪了发布代码的中间结果和数据流,您不了解操作的哪些方面?这不是一个要求全面浏览代码块的网站。第二,您尝试过什么来产生期望的输出?发布的代码对于如此简单的输出来说是多余的。这肯定是一个重复的问题,我们已经为您找到了一个很好的答案,但简短的版本是去掉
vals=[]
,而是将
self.vals=[]
放在
\uu init\uuuu
方法中。对于
id
j
可能也是如此。