Articles of identidad

Python es el comportamiento del operador con una cadena

No puedo entender el siguiente comportamiento. Estoy creando 2 cadenas, y estoy usando el operador para compararlo. En el primer caso, está funcionando de manera diferente. En el segundo caso, funciona como se esperaba. ¿Cuál es la razón cuando uso una coma o un espacio, muestra False al compararlo con, y cuando no se usa […]

¿Son los objetos de clase singletons?

Si tenemos x = type(a) y x == y , ¿implica necesariamente que x is y ? Aquí hay un contra-ejemplo, pero es un truco: >>> class BrokenEq(type): … def __eq__(cls, other): … return True … >>> class A(metaclass=BrokenEq): … pass … >>> a = A() >>> x = type(a) >>> x == A, x […]

La función `id` en Python 2.7, el operador` is`, la identidad del objeto y los métodos definidos por el usuario

Los resultados del código de abajo en Python 2.7 me parecieron una contradicción. El operador is se supone que trabaja con la identidad del objeto y también lo es el id . Pero sus resultados divergen cuando veo un método definido por el usuario. ¿Porqué es eso? py-mach >>class Hello(object): … def hello(): … pass […]

¿Por qué ‘() is ()’ devuelve True cuando ‘ is ‘ y ‘{} is {}’ devuelve False?

De lo que he sabido, usar [], {} o () para crear una instancia de objetos devuelve una nueva instancia de list, dict o tuple respectivamente; un nuevo objeto de instancia con una nueva identidad . Esto fue bastante claro para mí hasta que realmente lo probé y noté que () is () realidad devuelve […]

¿Por qué los métodos no tienen igualdad de referencia?

Tuve un error en el que confiaba en que los métodos son iguales entre sí cuando se usa. Resulta que ese no es el caso: >>> class What(object): def meth(self): pass >>> What.meth is What.meth False >>> inst = What() >>> inst.meth is inst.meth False ¿Por qué es ese el caso? Funciona para funciones regulares: […]

Establecer operador “in”: utiliza la igualdad o la identidad?

class A(object): def __cmp__(self): print ‘__cmp__’ return object.__cmp__(self) def __eq__(self, rhs): print ‘__eq__’ return True a1 = A() a2 = A() print a1 in set([a1]) print a1 in set([a2]) ¿Por qué la primera línea imprime verdadero, pero la segunda imprime falso? ¿Y tampoco entra el operador eq ? Estoy usando Python 2.6

El operador ‘is’ se comporta inesperadamente con enteros no almacenados en caché

Al jugar con el intérprete de Python, me topé con este caso conflictivo con respecto al operador: Si la evaluación tiene lugar en la función, devuelve True , si se realiza fuera, devuelve False . >>> def func(): … a = 1000 … b = 1000 … return a is b … >>> a = […]

¿Por qué id ({}) == id ({}) e id () == id () en CPython?

¿Por qué CPython (ninguna pista sobre otras implementaciones de Python) tiene el siguiente comportamiento? tuple1 = () tuple2 = () dict1 = {} dict2 = {} list1 = [] list2 = [] # makes sense, tuples are immutable assert(id(tuple1) == id(tuple2)) # also makes sense dicts are mutable assert(id(dict1) != id(dict2)) # lists are mutable […]

El operador “is” se comporta inesperadamente con enteros

¿Por qué lo siguiente se comporta inesperadamente en Python? >>> a = 256 >>> b = 256 >>> a is b True # This is an expected result >>> a = 257 >>> b = 257 >>> a is b False # What happened here? Why is this False? >>> 257 is 257 True # […]

¿Por qué la comparación de cadenas usando ‘==’ o ‘es’ produce a veces un resultado diferente?

Tengo un progtwig de Python en el que dos variables se configuran con el valor ‘public’ . En una expresión condicional tengo la comparación var1 is var2 que falla, pero si la cambio a var1 == var2 , devuelve True . Ahora, si abro mi intérprete de Python y hago la misma comparación “is”, tiene […]