Código Python:
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:Ver original
import datetime n_id=0 class nota: def __init__(self,info,eti=''): '''Método constructor que posee dos parámetros, información de la nota, y la etiqueta es opcional''' self.info=info self.eti=eti self.creation=datetime.date.today() global n_id n_id+=1 self.id=n_id def search(self,cadena): '''Metódo para buscar información en alguna nota''' return cadena in self.info or cadena in self.eti class cuaderno: '''Metódo contructor para crear la lista de notas''' def __init__(self): self.notas=[] def nuevaNota(self,info,eti=''): self.notas.append(nota(info,eti))
Código Python:
Ver original
import datetime n_id=0 class nota: def __init__(self,info,eti=''): '''Metódo constructor que posee dos parámetros, información de la nota, y la etiqueta es opcional''' self.info=info self.eti=eti self.creation=datetime.date.today() global n_id n_id+=1 self.id=n_id def search(self,cadena): '''Metódo para buscar información en alguna nota''' return cadena in self.info or cadena in self.eti class cuaderno: def __init__(self): '''Metódo contructor para crear la lista de notas''' self.notas=[] def nuevaNota(self,info,eti=''): self.objetonuevo=nota(info) self.notas.append(self.objetonuevo)
Como pueden visualizar lo que cambia es esta parte del codigo:
Código Python:
Ver original
def nuevaNota(self,info,eti=''): self.objetonuevo=nota(info) 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
x.notas [<__main__.nota object at 0x7f5735053390>, <__main__.nota object at 0x7f5734ff8be0>, <__main__.nota object at 0x7f5734ff8e80>] __main__.nota object at 0x7f5734ff8e80> >>> 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