2016-04-06 4 views
0

Я прочитал Python list + list vs. list.append(), что подобный вопрос, но мой вопрос больше по отношению к коду нижеPython Append против списка + списка

a = [[]] * 4 
b = [[]] * 4 
a[3] = a[3] + [1] 
b[3].append(1) 
print a, b 

Что дает:

[[],[],[],[1]] [[1],[1],[1],[1]] 

Почему бы этому 2 быть любым другим? Я никогда не работать в качестве примера, как это, где эти 2 метода имеют разные выходы ...

Благодаря

+0

http://stackoverflow.com/questions/36322067/the-meaning-of-on-list-in-python/36322093#36322093 Между созданием и модификацией может быть большое различие –

ответ

2

a[3] = a[3] + [1] не изменяя a[3]. Вместо этого он помещает туда новый элемент. a[3] + [1] создает список, похожий на a[3], за исключением того, что он имеет дополнительный в конце. Затем a[3] = ... устанавливает a по индексу 3 в этот новый список.

b[3].append(1) обращается к b[3] и использует его метод .append(). Метод .append() работает в самом списке и помещает один из них в конец списка. Поскольку [[]] * 4 создает список с четырьмя копиями другого списка, метод .append() показывает его изменения во всех позициях b.

Смежные вопросы