A = [[]]*2
A[0].append("a")
A[1].append("b")
B = [[], []]
B[0].append("a")
B[1].append("b")
print "A: "+ str(A)
print "B: "+ str(B)
Урожаи:
A: [['a', 'b'], ['a', 'b']]
B: [['a'], ['b']]
Можно было бы ожидать, что список совпадет со списком B, дело обстоит не так, оба добавляют операторы, были применены к [0] и [1].
Почему?
A = [[]] * 2
создает список с двумя идентичными элементами: [[], []]
.
Элементы - это тот же точный список.
Таким образом,
A[0].append("a")
A[1].append("b")
добавляет оба «a»
и «b»
в один и тот же список.
B = [[], []]
создает список с 2 отдельными элементами.
In [220]: A=[[]]*2
In [221]: A
Out[221]: [[], []]
Это показывает, что два элемента A
идентичны:
In [223]: id(A[0])==id(A[1])
Out[223]: True
In [224]: B=[[],[]]
Это показывает, что два элемента B
являются разными объектами.
In [225]: id(B[0])==id(B[1])
Out[225]: False