Предположим, у меня есть этот код:Умножить массивы, чтобы сделать матрицу дает неожиданный результат
dim = 3
eye = [[0] * dim] * dim
и это список список, я проверил
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Теперь, если я делаю это, я получаю :
eye[1][2] = 1
eye
[[0, 0, 1], [0, 0, 1], [0, 0, 1]]
Однако, если я вручную положить в этом выражении, приведенный выше код работает, как ожидалось:
eye2=[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
eye2[1][2] = 1
eye2
[[0, 0, 0], [0, 0, 1], [0, 0, 0]]
В чем разница между этими двумя?
Update: Спасибо за все объяснения, предположим, что у меня есть этот код:
a = [0]
type(a)
b = a * 3 # or b = [[0] *3]
Так, б удерживает 3 ссылки на. И я ожидаю, что изменение b [0] или b [1] или b [2] изменит все 3 элемента.
Но этот код показывает нормальное поведение, почему?
b[1] = 3
b
[0, 3, 0]
Кто-то научил меня, что я могу сделать такое скалярное умножение на списки. Если это так странно, то каково применение этого метода? – user1502776