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)
  
Abrir en editor

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)
  
Abrir en editor

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')
  
Abrir en editor

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 memoryview que compartan la misma memoria, lo que es útil para trabajar con subconjuntos de datos.
  • Mutabilidad: Puedes modificar los datos subyacentes en objetos bytearray a través de memoryview .

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)
  
Abrir en editor

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)
  
Abrir en editor

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')
  
Abrir en editor