a = "string"
 b = "string"

 causes three objects with different object id's to be created.

 irb(main):001:0>  a = "string"
=> "string"
irb(main):002:0>  b = "string"
=> "string"
irb(main):003:0> "string".object_id
=> 19087248
irb(main):004:0> a.object_id
=> 21660552
irb(main):005:0> b.object_id
=> 22419972


Yet
  a = "string"
  b = a
only causes two objects to be created.


irb(main):001:0>   a = "string"
=> "string"
irb(main):002:0>   b = a
=> "string"
irb(main):003:0> "string".object_id
=> 22106544
irb(main):004:0> a.object_id
=> 22650984
irb(main):005:0> b.object_id
=> 22650984


Yes, I know that one can do

  a = "string"
  b = a.clone

I understand what's happening.  I just don't know why the language designer(s) decided on -- what is to me -- surprising behavior.


So I have a Car Talk Puzzler (for which I do not have an answer): How would I initialize a bunch of strings so that they are clones rather than the same object?

In other words how would I do the following which is invalid Ruby.

a = b.clone = c.clone = "How to clone?"