From: Timothy Goddard Date: 2006-03-08T19:53:41+09:00 Subject: Re: ridiculous behavoir of Array#push and Array#clear This is because arr1 is storing a _reference_ to arr2. If you want to avoid this behaviour you could use any of the following: arr1 += arr2 (generates new array, old arr1 is now garbage) arr1 << arr2.dup (copies arr2, the copy is stored as an element of arr1) (arr1 << arr2).flatten! (ideal, but most verbose) The first two generate new objects. I believe the third doesn't (I may be wrong). Take your pick.