将对象附加到数组时出现意外输出

时间:2018-01-13 22:35:43

标签: python object

在我正在编写的程序中,我尝试将对象附加到列表,对该对象进行少量更改,然后将该对象的第二个版本附加到该列表。下面的代码不是我最初遇到此错误的代码,但它显示了同样的问题。

class A(object):
    def __init__(self):
        self.val = 0

    def __str__(self):
        return str(self.val)

a = A()
b = []
for i in range(10):
    b.append(a)
    a.val += 1

for a in b:
    print(a)

这是预期的输出:

0
1
2
3
4
5
6
7
8
9

这是实际输出:

10
10
10
10
10
10
10
10
10
10

2 个答案:

答案 0 :(得分:2)

您在same object循环的每次迭代中为for分配新值。您需要创建一个new object each time并为其赋予如下值:

class A(object):
def __init__(self):
    self.val = 0

def __str__(self):
    return str(self.val)

b = []
for i in range(10):
    b.append(A())
    b[i].val = i;


for a in b:
    print(a)

输出

0
1
2
3
4
5
6
7
8
9

答案 1 :(得分:0)

问题是,每次在列表中添加相同的对象,只是更改“val”的值。所以当for循环结束时。该对象具有val = 10,当您将相同的对象追加10次时,列表中的所有项都是值10.尝试每次添加相同类的不同对象callign A():)