Articles of python internals

Desconcertado con LOAD_FAST / STORE_FAST de python

Cuando escribí un código, encontré algo interesante: def test(): l = [] for i in range(10): def f():pass print(f) #l.append(f) test() import dis dis.dis(test) La salida es: <function test..f at 0x7f46c0b0d400> <function test..f at 0x7f46c0b0d488> <function test..f at 0x7f46c0b0d400> <function test..f at 0x7f46c0b0d488> <function test..f at 0x7f46c0b0d400> <function test..f at 0x7f46c0b0d488> <function test..f at 0x7f46c0b0d400> […]

¿Por qué el código usa variables intermedias más rápido que el código sin?

Me he encontrado con este comportamiento extraño y no pude explicarlo. Estos son los puntos de referencia: py -3 -m timeit “tuple(range(2000)) == tuple(range(2000))” 10000 loops, best of 3: 97.7 usec per loop py -3 -m timeit “a = tuple(range(2000)); b = tuple(range(2000)); a==b” 10000 loops, best of 3: 70.7 usec per loop ¿Por qué […]

¿Qué es exactamente __weakref__ en Python?

Sorprendentemente, no hay documentación explícita para __weakref__ . Las referencias débiles se explican aquí . __weakref__ también se menciona brevemente en la documentación de __slots__ . Pero no pude encontrar nada acerca de __weakref__ sí. ¿Qué es exactamente __weakref__ ? – ¿Es solo un miembro que actúa como un indicador: si está presente, el objeto […]

¿Por qué las tuplas ocupan menos espacio en la memoria que las listas?

Una tuple ocupa menos espacio de memoria en Python: >>> a = (1,2,3) >>> a.__sizeof__() 48 mientras que la list s ocupa más espacio en la memoria: >>> b = [1,2,3] >>> b.__sizeof__() 64 ¿Qué sucede internamente en la gestión de memoria de Python?

¿Cómo se implementa el método __subclasses__ en CPython?

Los doctores dicen que: Cada clase mantiene una lista de referencias débiles a sus subclases inmediatas. Este método devuelve una lista de todas las referencias que siguen vivas. Pero, ¿cómo obtiene cada clase una lista de referencias débiles a sus subclases en primer lugar? En otras palabras, cuando creo class B(A): pass ¿Cómo descubre A […]

Función int de Python

¿Intenta la función incorporada de Python intentar convertir el valor enviado incluso si el valor ya es un entero? Más concisamente: ¿hay alguna diferencia de rendimiento entre int(’42’) e int(42) causada por el algoritmo de conversión?

Concatenación literal de la cadena Python

Puedo crear una cadena multilínea usando esta syntax: string = str(“Some chars ” “Some more chars”) Esto producirá la siguiente cadena: “Some chars Some more chars” ¿Python se une a estas dos cadenas separadas o el editor / comstackdor las trata como una sola cadena? Ps: solo quiero entender lo interno. Sé que hay otras […]

¿Es la tupla vacía en Python una “constante”

Quiero hacer mi código más (memoria) eficiente. En este momento tenemos muchas funciones que toman un iterable como parámetro como: def foo(para,meter,iterable): #… pass y, a veces, tenemos que proporcionarle una lista vacía para que haga su trabajo correctamente: foo(14,25,[]) . El problema es que cada vez que se construye una nueva lista: se requiere […]

¿Cuándo usar los operadores “ y `! =`?

No se pudo encontrar mucho sobre esto. Tratando de comparar 2 valores, pero no pueden ser iguales. En mi caso, pueden ser (y con frecuencia son) mayor o menor que. Debería usar: if a b: dostuff o if a != b: dostuff Esta página dice que son similares, lo que implica que al menos hay […]

¿Debe importlib.reload restaurar un atributo eliminado en Python 3.6?

Estoy estudiando estas dos preguntas relacionadas: aquí y aquí . Estoy viendo un comportamiento que no espero en Python 3.6, que difiere del comportamiento usando la reload simple en Python 2.7 (y 3.4). Es decir, parece que un atributo de módulo que se completaría durante la inicialización del módulo o al volver a ejecutar el […]