pythonclub / pythonclub.github.io

Blog colaborativo sobre tecnologias que envolvam a linguagem Python
http://pythonclub.com.br/
207 stars 109 forks source link

New post: Diferença entre == e is #234

Closed gildasio closed 8 years ago

gildasio commented 8 years ago

Coloquei um post, mais para uma dica/curiosidade sobre operadores python, que repliquei do meu blog.

E também coloquei no .gitignore para ignorar a pasta "venv", comum onde a galera coloca o outrput do virtualenv.

igr-santos commented 8 years ago

@gjuniioor muito obrigado pela colaboração

luzfcb commented 8 years ago

@gjuniioor muito obrigado pela colaboração, eu coloquei seu artigo como rascunho por causa do meu comentário acima.

Vamos discutir melhor a explicação, para evitar confusão e equivocos para novos programadores Python

gildasio commented 8 years ago

Pow, muito obrigado pelo ótimo feedback!! Adoro isso.

Sobre a parte da explicação, coloquei dessa forma pois é justamente como é interpretado numa primeira olhada por algum programador, mas no decorrer do texto explico melhor e trato as diferenças entre ambos.

Sobre o número que ele faz esse procedimento, só não cheguei a determinar o limite disso, mas comentei também sobre isso.

No mais, bom refazer? Ou melhor, reorganizar?

ramalho commented 8 years ago

@gjuniioor @luzfcb Por favor não publiquem que "o operador is que tem a mesma função do =="! Esse assunto se não for muito bem explicado é melhor não publicar, porque qualquer post mais ou menos sobre o tema pode gerar uma onda gigante de desinformação...

raphapassini commented 8 years ago

@gjuniioor eu acredito que o texto precisa de uma reorganização básica.

No trecho:

O python tem um mecanismo interessante nesse ponto... Quando se tratam de coisas pequenas ele utiliza de ponteiros para apontar outros rótulos para um mesmo endereço de memória. Quando o que é armazenado na variável já começa a crescer, fica maior e tal, ele já não usa disso, para não pesar, mas sim de outro endereço ...

Leia o parágrafo. De maneira geral ele é muito vago, por exemplo: "coisas pequenas", "começa a crescer fica maior e tal", "para não pesar". Sugiro escrever isso com um caráter mais sério e informativo.

Uma informação mais precisa seria por exemplo dizer que no python 2 e 3 os ints são cacheados até o número 256, e depois disso não há mais essa otimização feita pelo interpretador. Ou seja o cache máximo de inteiros no python2 e python3 se restringe a 8 bits.

Já as Strings são objetos imutáveis e por isso o cache acontece. A primeira resposta dessa pergunta no Stackoverflow é bem esclarecedora http://stackoverflow.com/questions/20453640/why-strings-object-are-cached-in-python

Mais um detalhe seria esse parágrafo:

Ou seja, o is (como a tradução mostra) vai verificar se algo é aquilo a que a comparação está se referindo, ou seja, se são a mesma coisa. Já o == vai analisar se são iguais, assim como o esperado.

Eu reescreveria ele para maior clareza da seguinte forma:

Como pode ser visto nos exemplos acima, o operador *is* vai verificar se os objetos são idênticos, ou seja, ocupam o mesmo endereço de memória. Já o operador *==* vai analisar se os valores contidos no endereço de memória são iguais.

Seria legal citar também que o comportamento do operador == pode ser alterado nas classes definidas pelo usuário, basta para isso sobrescrever o método __eq__, veja o exemplo que o @luzfcb deu.

No mais parabéns pela contribuição. =) Acredito que com esses pequenos ajustes vamos poder publicar o texto! :+1:

gildasio commented 8 years ago

Pow, galera, muito obrigado mesmo!

O texto tem um tom informal e com poucos detalhes pois se tratou apenas de um tip para um blog pessoal. E ainda bem que mandei aqui, ótimas dicas vindo!!

Vou, o mais rápido que puder, fazer um texto mais sério e com mais detalhes. Desde já, agradeço todos vocês pela força!