Назначение массива Ruby дает неожиданный результат

gdonald спросил: 03 февраля 2018 в 11:52 в: ruby

У меня есть:

a = [['-', '-', '-'], ['-', '-', '-'], ['-', '-', '-']]
b = [['-'] * 3] * 3 # => [["-", "-", "-"], ["-", "-", "-"], ["-", "-", "-"]]
a == b #=> true

Кажется правильным.

a[0][0] = 'X'
a # => [["X", "-", "-"], ["-", "-", "-"], ["-", "-", "-"]]b[0][0] = 'X'
b # => [["X", "-", "-"], ["X", "-", "-"], ["X", "-", "-"]]a == b # => false

Что? Почему b[0][0] = 'X' меняет значения в трех местах?

Я также обнаружил, что это не работает следующим образом:

b = [%w[- - -]] * 3 # => [["-", "-", "-"], ["-", "-", "-"], ["-", "-", "-"]]
b[0][0] = 'X'
b # => [["X", "-", "-"], ["X", "-", "-"], ["X", "-", "-"]]


0 ответов