Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Duda con funcionamiento de listas de objetos

Estas en el tema de Duda con funcionamiento de listas de objetos en el foro de Python en Foros del Web. Buenas noches comunidad de foros de web, estoy aprendiendo un poco de la POO en python, estoy siguiendo los videotutoriales del sr Jésus Conde por ...
  #1 (permalink)  
Antiguo 27/05/2015, 23:22
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Duda con funcionamiento de listas de objetos

Buenas noches comunidad de foros de web, estoy aprendiendo un poco de la POO en python, estoy siguiendo los videotutoriales del sr Jésus Conde por su canal de youtube, sin embargo en uno de los ejercicios planteados por el, tengo una pequeña duda el crear una lista de objetos, en si el ejercicio trata sobre un cuaderno donde se pueden guardar diversas notas y este es el código funcionando

Código Python:
Ver original
  1. import datetime
  2. n_id=0
  3.  
  4. class nota:
  5.     def __init__(self,info,eti=''):
  6.         '''Método constructor que posee dos parámetros, información de la nota, y la etiqueta es opcional'''
  7.         self.info=info
  8.         self.eti=eti
  9.         self.creation=datetime.date.today()
  10.         global n_id
  11.         n_id+=1
  12.         self.id=n_id
  13.  
  14.     def search(self,cadena):
  15.         '''Metódo para buscar información en alguna nota'''
  16.         return  cadena in self.info or cadena in self.eti
  17.  
  18. class cuaderno:
  19. '''Metódo contructor para crear la lista de notas'''
  20.     def __init__(self):
  21.         self.notas=[]
  22.  
  23.     def nuevaNota(self,info,eti=''):
  24.         self.notas.append(nota(info,eti))
En ese código planteado puedo acceder a los diversos atributos de la clase sin problemas a través de la lista de objetos, sin embargo para aumentar mis conocimientos quise hacerlo de esta forma que funciona igualmente pero me ha surgido una duda:

Código Python:
Ver original
  1. import datetime
  2. n_id=0
  3.  
  4. class nota:
  5.     def __init__(self,info,eti=''):
  6.         '''Metódo constructor que posee dos parámetros, información de la nota, y la etiqueta es opcional'''
  7.         self.info=info
  8.         self.eti=eti
  9.         self.creation=datetime.date.today()
  10.         global n_id
  11.         n_id+=1
  12.         self.id=n_id
  13.  
  14.     def search(self,cadena):
  15.         '''Metódo para buscar información en alguna nota'''
  16.         return  cadena in self.info or cadena in self.eti
  17.  
  18. class cuaderno:
  19.     def __init__(self):
  20.         '''Metódo contructor para crear la lista de notas'''
  21.         self.notas=[]
  22.  
  23.     def nuevaNota(self,info,eti=''):
  24.  
  25.         self.objetonuevo=nota(info)
  26.         self.notas.append(self.objetonuevo)

Como pueden visualizar lo que cambia es esta parte del codigo:

Código Python:
Ver original
  1. def nuevaNota(self,info,eti=''):
  2.  
  3.         self.objetonuevo=nota(info)
  4.         self.notas.append(self.objetonuevo)

Mi duda es la siguiente, usar el metódo nuevaNota se agregan mas objetos a la lista y se puede visualizar los atributos de los objetos a través de los subíndices sin embargo el objeto self.objetonuevo se queda con los últimos atributos asignados al llamar al metódo nuevaNota, hay es donde viene mi pregunta ¿Al agregar el objeto a la lista, se hace un copia del objeto a la lista? He probado verificando los valores de la memoria a través del prompt y no es una copia por que la dirección de memoria siempre es igual al ultimo objeto insertado en la lista les dejo la prueba que realicé instanciando un objeto llamado x y su valor de memoria:

Código Python:
Ver original
  1. x.notas
  2. [<__main__.nota object at 0x7f5735053390>, <__main__.nota object at 0x7f5734ff8be0>, <__main__.nota object at 0x7f5734ff8e80>]
  3.  
  4. __main__.nota object at 0x7f5734ff8e80>
  5. >>> x.objetonuevo

Como pueden darse cuenta la dirección de memoria del objeto es la misma que la del ultimo elemento de la lista de objetos, en fin ¿Los objetos son inmutables? ¿Al instanciar un objeto con el mismo nombre se hace referencia con otro valor de memoria al nombre del objeto? ¿La listas en si guardan direcciones de memoria y no nombres de objetos? Gracias de antemano por su ayuda
  #2 (permalink)  
Antiguo 28/05/2015, 08:12
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda con funcionamiento de listas de objetos

Cita:
¿Los objetos son inmutables?
No. Un lenguaje donde esto sea cierto en general tendría un paradigma de programación bastante extraño (se podrían crear objetos pero no modificar sus propiedades...)
Cita:
¿Al instanciar un objeto con el mismo nombre se hace referencia con otro valor de memoria al nombre del objeto?
¿Qué es un nombre en este contexto? si te referís a la variable que referencia al objeto, en general se cumple en los lenguajes de alto nivel que las variables son referencias (punteros), no objetos en sí. El nombre de la variable que contiene la referencia es absolutamente irrelevante.
Cita:
¿La listas en si guardan direcciones de memoria y no nombres de objetos?
Vuelvo a preguntar qué es un "nombre" en este contexto, pero si: las listas guardan referencias a objetos, no objetos ni nombres de variable.
  #3 (permalink)  
Antiguo 28/05/2015, 08:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda con funcionamiento de listas de objetos

1. No python no hace una copia de tu objeto.
2. Los objetos (al menos los que has creado) no son inmutables.
3. Si, al instanciar otro objeto no importa si tiene los mismos valores ocupa otro lugar diferente en memoria.
4. En python no existen variables per se, si no que simplemente a los valores que tienes les asignas nombres. Ver http://mundogeek.net/traducciones/python-idiomatico/ en el apartado (Otros lenguajes tienen "variables")
  #4 (permalink)  
Antiguo 29/05/2015, 17:54
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Duda con funcionamiento de listas de objetos

Muchísimas gracias razpeitia y AlvaroG me ha quedado todo mas claro. Me toca seguir documentándome, el link que me enviaste esta de lujo de nuevos gracias.

Etiquetas: funcion, funcionamiento, gui, listas, objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:10.