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