Что делает [[]] *2, делают в Python?

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].

Почему?

8
задан NorthIsUp 2 July 2010 в 01:44
поделиться

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
16
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: