虽然您所描述的行为(如您所描述的)是不可能的,但我会试着解决这个问题。
如果创建一个列表,则需要确保每个子列表都是不同的列表。例如:
a = []
b = [a, a]
我创建了一个列表,其中两个子列表都是完全相同的列表。如果我更改其中一个列表,它将同时显示在另一个列表中。例如:
>>> a = []
>>> b = [a, a]
>>> b[0].append(1)
>>> b
[[1], [1]]
你经常会看到使用 *
运算符初始化列表时出现这种行为:
a = [[None]*7]*7
例如。
>>> a = [[None]*7]*7
>>> a
[[None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None]]
>>> a[0][1] = 3
>>> a
[[None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None], [None, 3, None, None, None, None, None]]
修复方法是不在外部列表中使用*
7(内部列表可以使用,因为None
是不可变的):
a = [[None]*7 for _ in range(7)]
e.g.:
>>> a = [[None]*7 for _ in range(7)]
>>> a[0][1] = 3
>>> a
[[None, 3, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None], [None, None, None, None, None, None, None]]