Experimentos com variáveis de instância do Ruby

Lendo sobre como o Java trabalha com objetos resolvi testar para saber como o ruby se comporta. O exemplo a seguir compara a cópia de variáveis do tipo Fixnum com cópia de variáveis de instância. Bem curioso.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@um = 1
@dois = @um #Copia o valor de uma variável para outra.
@dois = 2
puts @um#=> 1 //ok!
puts @dois#=> 2 //ok
class Pessoa
	attr_accessor :name
end
@marcao = Pessoa.new
@rafael = @marcao
@marcao.name = "Marco"
puts @marcao.name #=> "Marco"
@rafael.name = "Rafael"
puts @marcao.name #=> "Rafael" //êpa?

Esse exemplo é a prova de que o ruby usa as variáveis de instância para apontar para um local na memória, e na verdade as variáveis não contém o objeto propriamente dito. Quando copiamos o valor de uma variável de instância para outra, estamos copiando o endreço na memória. Passam a ser nomes diferentes para o memo objeto.

Acho importante ficar esperto com isso, por que as vezes são esses tipos de detalhes que atrasam algumas horas do nosso trabalho!

Bom, além do Ruby, eu sei que o Java funciona assim também. Será que alguma linguagem faz diferente disso? Se souber me diga!