Función memoryview() en Python
La función
memoryview()
en Python se utiliza para crear un objeto de tipo
memoryview
, que proporciona una vista de memoria de un objeto mutable, como una secuencia de bytes (por ejemplo, bytes, bytearray) u otras secuencias mutables (por ejemplo, una lista). El objeto
memoryview
permite acceder a los datos subyacentes en memoria sin realizar copias de los datos originales, lo que puede ser útil para trabajar con grandes conjuntos de datos o realizar manipulaciones de datos eficientes.
Aquí tienes una lección detallada sobre
memoryview()
en Python:
Creación de un objeto memoryview
Puedes crear un objeto
memoryview
de varias maneras:
A partir de bytes o bytearray
Ejemplo
data = bytes([65, 66, 67, 68, 69]) # Una secuencia de bytes
view = memoryview(data)
print(view)
A partir de una cadena de bytes (bytes literal)
Ejemplo
data = b"Hola"\nview = memoryview(data)\nprint(view)
A partir de una lista de enteros (usando bytearray para convertirla a bytes)
Ejemplo
data = [65, 66, 67, 68, 69] # Una lista de enteros
byte_data = bytearray(data)
view = memoryview(byte_data)
print(view)
Acceso a los datos en memoria
El objeto
memoryview
permite acceder a los datos subyacentes de manera eficiente. Puedes acceder a los elementos individuales utilizando la notación de índice, y también puedes realizar "slicing" (rebanado) para obtener una vista de un subconjunto de los datos.
Ejemplo
view = memoryview(b"Hola")
# Acceso mediante índice
print(view[0]) # Resultado: 72 (el valor ASCII de 'H')
# Acceso mediante slicing
print(view[1:4]) # Resultado: b'ola' (una nueva vista de memoria)
Modificación de los datos subyacentes
El objeto
memoryview
es mutable, lo que significa que puedes modificar los datos subyacentes. Esto es especialmente útil cuando trabajas con objetos
memoryview
.
Ejemplo
data = bytearray(b"Hola")
view = memoryview(data)
# Modificación de un elemento
view[0] = 77 # Cambia 'H' a 'M'
print(data) # Resultado: bytearray(b'Mola')
Ventajas de memoryview
Las ventajas de usar
memoryview
incluyen:
- Eficiencia de memoria: No se crean copias de los datos, lo que ahorra memoria cuando trabajas con grandes conjuntos de datos.
- Eficiencia en el rendimiento: Al acceder directamente a los datos en memoria, las operaciones son más rápidas que copiar datos.
-
Permite vistas personalizadas:
Puedes crear múltiples objetos
memoryviewque compartan la misma memoria, lo que es útil para trabajar con subconjuntos de datos. -
Mutabilidad:
Puedes modificar los datos subyacentes en objetos
bytearraya través dememoryview.
Limitaciones
Es importante tener en cuenta que
memoryview
no se puede utilizar con objetos inmutables como cadenas de texto (str) o tuplas. Solo funciona con objetos mutables que admiten cambios en su contenido.
En resumen, la función
memoryview()
en Python es una herramienta poderosa para trabajar con datos en memoria de manera eficiente y efectiva, especialmente cuando se trata de manipular bytes o secuencias de datos grandes sin la necesidad de copiarlos.
Practica Función memoryview() en Python en el editor
Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.
Ejercicio: Usar print()
A partir de una lista de enteros (usando bytearray para convertirla a bytes).
Ejemplo
data = bytes([65, 66, 67, 68, 69]) # Una secuencia de bytes
view = memoryview(data)
print(view)
Ejercicio: El objeto
El objeto memoryview permite acceder a los datos subyacentes de manera eficiente. Puedes acceder a los elementos individuales utilizando la notación de índice,.
Ejemplo
view = memoryview(b"Hola")
# Acceso mediante índice
print(view[0]) # Resultado: 72 (el valor ASCII de 'H')
# Acceso mediante slicing
print(view[1:4]) # Resultado: b'ola' (una nueva vista de memoria)
Ejercicio: El objeto (2)
El objeto memoryview es mutable, lo que significa que puedes modificar los datos subyacentes. Esto es especialmente útil cuando trabajas con objetos.
Ejemplo
data = bytearray(b"Hola")
view = memoryview(data)
# Modificación de un elemento
view[0] = 77 # Cambia 'H' a 'M'
print(data) # Resultado: bytearray(b'Mola')