Fefer_Ivan's blog

By Fefer_Ivan, 14 years ago, In Russian
Доброе утро/день/вечер/ночь, Codeforces!

Сегодня я впервые попробовал сдать несколько задач на Python.
Во время написание одной из них, я обнаружил что-то совсем непонятное в поведении вложенных списков:

Пусть нам нужен массив 2 на 2.

Пишем:
a = [[0]*2]*2
print "Before:"
print a
a[0][0] = 1
print "After:"
print a

Получаем:
Before:
[[0, 0], [0, 0]]
After:
[[1, 0], [1, 0]]

Вопрос: почему изменился второй список?

Если написать немного по-другому:
a = [[0]*2]
a.append([0]*2)
print "Before:"
print a
a[0][0] = 1
print "After:"
print a

Получаем:
Before:
[[0, 0], [0, 0]]
After:
[[1, 0], [0, 0]]

Вопрос: в чем разница?

Windows 7, 32-bit, Python 2.7.1
Строка запуска: python solution.py < input.txt
  • Vote: I like it
  • +26
  • Vote: I do not like it