Vue mémoire Python ()

La fonction memoryview () renvoie un objet de vue mémoire de l'argument donné.

Avant d'entrer dans ce que sont les vues de mémoire, nous devons d'abord comprendre le protocole de tampon de Python.

Protocole de tampon Python

Le protocole tampon fournit un moyen d'accéder aux données internes d'un objet. Ces données internes sont un tableau de mémoire ou un tampon.

Le protocole de tampon permet à un objet d'exposer ses données internes (tampons) et à l'autre d'accéder à ces tampons sans copie intermédiaire.

Ce protocole ne nous est accessible qu'au niveau C-API et n'utilise pas notre base de code normale.

Ainsi, afin d'exposer le même protocole à la base de code Python normale, des vues de mémoire sont présentes.

Qu'est-ce qu'une vue mémoire?

Une vue mémoire est un moyen sûr d'exposer le protocole de tampon en Python.

Il vous permet d'accéder aux tampons internes d'un objet en créant un objet de vue mémoire.

Pourquoi le protocole de tampon et les vues de mémoire sont-ils importants?

Nous devons nous rappeler que chaque fois que nous effectuons une action sur un objet (appelons une fonction d'un objet, découpons un tableau), Python doit créer une copie de l'objet .

Si nous avons de grandes données avec lesquelles travailler (par exemple, les données binaires d'une image), nous créerions inutilement des copies d'énormes blocs de données, ce qui ne sert presque à rien.

En utilisant le protocole tampon, nous pouvons donner à un autre objet l'accès pour utiliser / modifier les données volumineuses sans les copier. Cela permet au programme d'utiliser moins de mémoire et augmente la vitesse d'exécution.

Syntaxe de Python memoryview ()

Pour exposer le protocole de tampon en utilisant memoryview(), nous utilisons cette syntaxe:

 memoryview (obj)

Paramètres de memoryview ()

La memoryview()fonction prend un seul paramètre:

  • obj - objet dont les données internes doivent être exposées. objdoit prendre en charge le protocole de tampon (octets, bytearray)

Valeur renvoyée par memoryview ()

La memoryview()fonction renvoie un objet de vue mémoire.

Exemple 1: Comment fonctionne memoryview () en Python?

 #random bytearray random_byte_array = bytearray('ABC', 'utf-8') mv = memoryview(random_byte_array) # access memory view's zeroth index print(mv(0)) # create byte from memory view print(bytes(mv(0:2))) # create list from memory view print(list(mv(0:3)))

Production

 65 b'AB '(65, 66, 67) 

Ici, nous avons créé un objet de vue mémoire mv à partir du tableau d'octets random_byte_array.

Ensuite, nous avons accédé au 0ème index du mv, et l'avons 'A'imprimé (ce qui donne la valeur ASCII - 65).

Encore une fois, nous avons accédé aux indices de mv de 0 et 1 'AB', et les avons convertis en octets.

Enfin, nous avons accédé à tous les indices de mv et l'avons converti en une liste. Comme bytearraystocke en interne la valeur ASCII pour les alphabets, la sortie est une liste de valeurs ASCII de A, B et C.

Exemple 2: modification des données internes à l'aide de la vue mémoire

 # random bytearray random_byte_array = bytearray('ABC', 'utf-8') print('Before updation:', random_byte_array) mv = memoryview(random_byte_array) # update 1st index of mv to Z mv(1) = 90 print('After updation:', random_byte_array)

Production

 Avant la mise à jour: bytearray (b'ABC ') Après la mise à jour: bytearray (b'AZC') 

Ici, nous avons mis à jour le premier index de la vue mémoire à 90, la valeur ASCII de Z.

Puisque l'objet de vue mémoire mv fait référence au même tampon / mémoire, la mise à jour de l'index dans mv met également à jour random_byte_array.

Articles intéressants...