尽管您所描述的行为(正如您所描述的那样)是不可能的,但我还是要尝试一下这一点。
如果创建列表,则需要确保每个子列表都是不同的列表。考虑:
a = []
b = [a, a]
在这里,我创建了一个列表,其中两个子列表是完全相同的列表。如果我改变其中之一,它就会同时出现在两者中。例如。:
>>> a = []
>>> b = [a, a]
>>> b[0].append(1)
>>> b
[[1], [1]]
您会经常看到使用以下命令初始化的列表的这种行为*
操作员:
a = [[None]*7]*7
e.g.
>>> 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]]