питон a=[[],]*10

Возможный дубликат:
путаница со списком Python

Когда я пишу простой скрипт на Python, я определяю новый список следующим образом:

A=[[],]*10

Что я хочу сделать, так это просто инициализировать список, длина которого равна 10, и каждый элемент является пустым списком.

И когда я делаю что-то вроде:

A[0].append(["abc",])

Я просто хочу добавить это ["abc",] к A[0], и оказывается, что каждый элемент в A добавляется с ["abc",]

Я знаю это, вероятно, из-за моей инициализации (A=[[],]*10). Я просто хочу знать, почему это произошло.


person Jerry Meng    schedule 22.09.2012    source источник
comment
[x,] лучше писать как [x]. В любом случае обратите внимание, что list*int не клонирует объекты.   -  person    schedule 23.09.2012


Ответы (3)


Вы создаете список с 10 ссылками на один и тот же пустой список.

Вместо этого вы должны использовать понимание списка:

A = [[] for _ in range(10)]

При включении списка вы создаете новый список для каждой итерации цикла. Если вы используете python 2, вы должны использовать xrange вместо range (хотя только с 10 элементами, которые не будут иметь большого значения).

person Martijn Pieters    schedule 22.09.2012

Ваше выражение A=[[]]*10 эквивалентно:

a = []
A = [a]*10

Это означает, что A состоит из 10 ссылок на один и тот же список.

person Vortexfive    schedule 22.09.2012

Все пустые списки являются ссылками на один и тот же объект.

person Roland Smith    schedule 22.09.2012