There are many languages where b = a will not create a copy of the object, but instead just point the variable a to the value held at object b. This is actually intended language behavior. It is the same in the language I use, smalltalk.
If you google "ruby copy" or "ruby deepcopy" you will find some pages with instructions on how to do a copy or deep copy in Ruby.
RE: Chess Programming, I am not using Ruby anymore