Variables hold a reference to an object. For example, variables can reference strings and symbols like:
a = 'foo'
b = :bar
In Ruby string are mutable, it means that you can change them: 'foo' + 'bar'
will give a concatenated string. You can perceive symbols as immutable strings, it means that you cannot change a symbol: :foo + :bar
will give you an error. Most importantly, the same symbols hold reference to the same object:
a = :foo
b = :foo
a.object_id # => 538728
b.object_id # => 538728
This increases performance in hash lookups and other operations.