From: Adam Bender Date: 2008-04-15T02:25:07+09:00 Subject: Mutable member variables -- surprising behavior I noticed some surprising behavior in one of my Ruby programs, and am wondering what the rationale is. Basically, given read-only access to a member variable (using attr_reader) of class Array, I can modify that Array by modifying (what I think should be) a local copy of it. Shouldn't the accessor return a copy of the variable instead of a reference to it? Or is it standard practice to hand-write an accessor for arrays that returns a clone of the array? #!/usr/bin/ruby class Example attr_reader :elems def initialize @elems = [] 3.times { @elems << Object.new } end def to_s @elems.inspect end end e = Example.new puts e # output is: # -604282308 # [#, #, #] list = e.elems puts list.object_id # output is: -604282308 list.delete_at(0) puts e # output is # -604282308 # [#, #]