2012-02-03 21 views

Respuesta

14
>>> '[[0]*2]*2' 
'[[0]*2]*2' 

>>> `[[0]*2]*2` 
'[[0, 0], [0, 0]]' 

El primero es de texto, el segundo evalúa inmediatamente en la estructura de datos y devuelve su representación de texto '[[0, 0], [0, 0]]'.

El problema con [[0]*2]*2 es que esto se evalúa como una lista de referencias para el mismo objeto. Es por eso que obtienes [[1,0],[1,0]] y no [[1,0],[0,0]].

+6

Vale la pena señalar que esta sintaxis backquote se ha eliminado de Python 3. Utilice 'repr()' en su lugar. –

+2

Es importante mencionar que las "comillas invertidas" no son comillas en Python, sino que equivalen a una llamada a "repr", pero lo que está dentro es "código en vivo" que se ejecuta. Sí, esto es extraño, y se ha eliminado en una versión más nueva. Uno debe evitar el uso de comillas inversas. – jsbueno

5
eval('[[0]*2]*2') 

Esto crea el resultado de evaluar el código Python [[0]*2]*2. Multiplicar una lista hace una lista con varias referencias a los objetos originales. La lista resultante es [x, x], donde cada x es una lista que se parece al [0, 0]. La modificación de una de las sublistas modifica ambos, porque son el mismo objeto.

eval(`[[0]*2]*2`) 

Esto crea lo anterior (a través del interior [[0]*2]*2), a continuación, crea la representación de cadena (debido a los acentos abiertos), que es [[0, 0], [0, 0]], crea entonces el resultado de evaluar que, como código Python. Esta vez, las dos sublistas son listas separadas que parecen [0, 0], pero son objetos separados. Modificar uno de ellos no tiene ningún efecto en el otro, porque no son el mismo objeto.

Por cierto, el uso de `` se ha desaconsejado durante muchos años. Usted realmente no puede citar cosas con ``. Se usa para crear la representación de cadena de algún objeto de Python.

`hi mom` 

es un error de sintaxis.

Cuestiones relacionadas