Issue #12765 has been updated by Hans Mackowiak.


this is not much of a bug,

your array has three times the same element object (same object id)


you want:
list = Array.new(3) { [1] } #=> [[1], [1], [1]]

list[0][0] = -1

list #=> [[-1], [1], [1]]


----------------------------------------
Bug #12765: An [element] multiply an number, every element in the list would be modified after modifying only one of then.
https://bugs.ruby-lang.org/issues/12765#change-60520

* Author: jieqi fan
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin14]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
`
element = [1]
list = [element.clone] * 3
p list #[[1], [1], [1]]
list[0][0] = -1 # should be [[-1], [1], [1]]
p list # [[-1], [-1], [-1]]
`
The list initialized as [ [1], [1] ].  Then we assign the list[0][0], which is 1, as -1, and the list[1][0] is changed as -1 too.




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>