Python - Función map() modifica el iterable original?

 
Vista:
Imágen de perfil de María
Val: 6
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Función map() modifica el iterable original?

Publicado por María (2 intervenciones) el 12/02/2021 00:39:16
Hola, os agradezco la paciencia. Estoy empezando en Python y tengo una duda sobre un concepto que, en principio, me pareció muy simple. ¿Porqué la función map() en Python a veces modifica el iterable original y otras no?
Os envío un ejemplo para que entendáis lo que quiero decir. Muchas gracias de antemano :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class Alumnado:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad
 
    def __str__(self):
        return "{} de {} años".format(self.nombre, self.edad)
 
alumnos = [
    Alumnado("Leonardo", 38),
    Alumnado("Ana", 33),
    Alumnado("Sabrina", 12),
    Alumnado("Enrique", 23)]
 
#El siguiente map() incrementa la edad en 1 año
un_anio_mas = map(lambda a: a.edad + 1, alumnos)
for a in un_anio_mas:
	print (a, end=" ")
 
"""
39 34 13 24
"""
 
 
#pero no modifica la lista original
print()
for alumno in alumnos:
    print(alumno)
 
"""
Leonardo de 38 años
Ana de 33 años
Sabrina de 12 años
Enrique de 23 años
"""
 
#Pero este map() incrementa la edad en 1 año...
def incrementar(a):
    a.edad += 1
    return a.edad
 
un_anio_mas2 = map(incrementar, alumnos)
for a in un_anio_mas2:
   print(a, end=" ")
 
"""
39 34 13 24
"""
 
 
#...y SÍ modifica la lista original.
print()
for alumno in alumnos:
    print(alumno)
 
"""
Leonardo de 39 años
Ana de 34 años
Sabrina de 13 años
Enrique de 24 años
"""
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de aberon10
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Función map() modifica el iterable original?

Publicado por aberon10 (109 intervenciones) el 12/02/2021 01:45:07
Hola Maria, En el primer caso, en el que utilizas una expresión lambda lo que haces es sumar 1 y retornar su valor. En cambio, en el segundo caso donde utilizas una función callback, estas alterando/modificando de forma directa el objeto original al realizar a.edad+=1, es por ello que se modifica en este caso el valor de la propiedad edad.

Nos comentas si tienes alguna duda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de María
Val: 6
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Función map() modifica el iterable original?

Publicado por María (2 intervenciones) el 12/02/2021 11:06:14
Muchas gracias por tu explicación. Ahora intentaré averiguar porqué pienso que esta función lambda:
1
lambda a: a.edad + 1, alumnos

era otra manera de expresar el método:
1
2
3
def incrementar(a):
    a.edad += 1
    return a.edad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar