2012-03-28 15 views
11

yo soy un recién llegado a Pitón pero entiendo que las cosas no se deben hacer de esta manera, así que tenga en cuenta los siguientes fragmentos de código como :-) puramente educativamodificación de lista en un bucle

estoy actualmente leer 'Learning Python' y tratando de entender completamente el siguiente ejemplo:

>>> L = [1, 2, 3, 4, 5] 
>>> for x in L: 
... x += 1 
... 
>>> L 
[1, 2, 3, 4, 5] 

yo no entendía si este comportamiento era algo relacionado con la inmutabilidad de los tipos numéricos, así que he ejecute la prueba siguiente:

>>> L = [[1], [2], [3], [4], [5]] 
>>> for x in L: 
... x += ['_'] 
... 
>>> L 
[[1, '_'], [2, '_'], [3, '_'], [4, '_'], [5, '_']] 

Pregunta: ¿Qué hace que la lista no se modifique en el primer código y se modifique en el segundo?

Mi intuición es que la sintaxis es engañosa y que:

  • x += 1 para un número entero que realmente significa x = x + 1 (asignando así una nueva referencia)
  • x += ['_'] para obtener una lista realmente significa x.extend('_') (cambiando así la lista en el lugar)
+7

su intuición es correcta –

+3

y, para completar, la forma "correcta" de hacerlo es '[x + 1 para x en L] ' – Kimvais

+0

@Kimvais: eso supone que desea crear una nueva lista. – MattH

Respuesta

5

Pregunta: ¿Qué hace que la lista no se modifique en el primer código y se modifique en el segundo?

En el primer código, la lista es una secuencia de enteros (inmutables). El ciclo establece x para referirse sucesivamente a cada elemento de la secuencia. x += 1 cambia x para hacer referencia a un número entero diferente que es uno más que el valor x anteriormente mencionado. El elemento en la lista original no se modifica.

En el segundo código, la lista si una secuencia de listas (mutables). El ciclo establece x para referirse sucesivamente a cada elemento de la secuencia. x += ['_'] como x se refiere a una lista, esto extiende la lista mencionada por x con ['_'].

+0

Así que es realmente la inmutabilidad del número entero lo que lo explica, ¡gracias! – icecrime

Cuestiones relacionadas