Будет ясно, если вы проверите содержимое среза перед его назначением
> a = [ 1, 3, 5, 7, 9 ]
> a[2, 2]
=> [5, 7] # this mean if you assign to that, the content overwrite on that part
> a
=> [1, 3, "cat", 9]
Также то же самое для a [2, 0] = ’dog’
> a[2,0]
=> [] # it will not overwrite anything,
> a[2, 0] = "dog" #but slice starts at index 2, so it will just insert 'dog' into array
=> [1, 3, "dog", "cat", 9]
С другой стороны, a [2] возвращает 5, и присваивается, что будет перезаписывать данные, поэтому это не то же самое.
> a = [ 1, 3, 5, 7, 9 ]
> a[2]
=> 5
> a[2] = 'dog'
=> [1, 3, "dog", 7, 9] # a[2] got overwritten, instead of getting inserted.