Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Saber el contenido de un objeto mediante el ID()
#1
Código:
lista = [1, 30, 18, 100, 121, 15, 180, 221, 39, 44]
a = id(lista[7])
print(a)

b = id(221)
print(b)

Hola gente ¿Cómo están?, voy a la pregunta ¿hay alguna manera de saber el contenido
de la memoria utilizando el identificador que regresa id()?
En concreto necesito conocer el índice del numero 221 que en este caso es 7.-
Es todo, luego les cuento que quiero hacer con esto.-

Slds. Daniel.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
Hola, Daniel.

No entiendo bien la pregunta. Tal vez si nos comentás qué vendría a resolver el id() lo logre ver más claro. En CPython (la implementación oficial del lenguaje) la función id() retorna la dirección de memoria del objeto pasado como argumento, pero puede que otras implementaciones (incluso versiones de CPython futuras) trabajen diferente. Si querés conocer el índice del 221, ¿por qué no usar lista.index(221)?

Saludos
Responder
#3
Te cuento la historia desde el comienzo, estaba aprendiendo/analizando la búsqueda binaria,
que de paso me parece de una inteligencia superior a quien se le antojo ese método, excelente,
y hete aquí que me pregunte ¿Por qué no intentar mejorarlo? y me puse a practicar con esto
ya que tiene la ventaja de no tener que ordenar la lista que en caso de la búsqueda binaria es
imprescindible, pero bueno me topo con el inconveniente que con tener “la etiqueta/identificador”
de la variable parece que no basta para obtener los datos/valores.-
Te cuento lo de index, lo probé con 1.000.000 de números en una lista y “al instante” me muestra el resultado:
Índice = 999998  -->  numero = 999999
Porque siendo esto tan veloz se lee de tantos métodos de búsqueda ¿acaso los otros lenguajes no lo
disponen?, no entiendo.-
Bueno, en definitiva me quedo con la duda, no puedo creer que teniendo la dirección de memoria de una
variable no puedo acceder a el valor contenido en ella.-
Francisco, lo mejor para vos tu flia. Y todos los que te lean, abrazo.-
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
Hola, Daniel.

Un millón de números no es demasiada información como para que index() tarde mucho, sin mencionar que esas funciones están escritas en C, por lo cual se ejecutan bastante más rápido que el código equivalente en Python. Con respecto a la lectura de datos a partir de la dirección de memoria, se puede hacer. Podrías usar el módulo ctypes o, mejor si estás en Windows, la función ReadProcessMemory vía pywin32. Con todo, tené en cuenta que el valor retornado por id() es la dirección de memoria del objeto de Python, no necesariamente donde se encuentra el número en sí mismo, así que tal vez tengas que hurgar un poco en el código de fuente del intérprete para determinar cuál es la estructura de los objetos enteros en la memoria.

Saludos
Responder
#5
Hola Francisco, ¿Cómo estas?, gracias x ocuparte, estuve buscando algo que se asemeje
a lo mío con esa función pero no lo encuentro, x lo tanto ya archive tu sugerencia entre
mis favoritos y en el futuro retomare el tema, me parece demasiado para alguien que
hace 2 meses inicio con python.-
Nos estamos leyendo, un abrazo…
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#6
Hola, Daniel.

Es un poco complejo porque Python no está pensado para estas cosas, al tratarse de un lenguaje de alto nivel. Si querés implementar una búsqueda binaria, seguramente te sea más conveniente escribir el código en C, donde tenés acceso directo a la memoria, y luego importarlo desde Python (podés chusmear un poco del asunto acá: https://recursospython.com/guias-y-manua...thon-en-c/).

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)