English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La fonction memoryview() retourne un objet de vue en mémoire pour le paramètre donné.
Avant de comprendre ce qu'est la vue en mémoire, nous devons d'abord comprendre le protocole de tampon de Python.
Le protocole de tampon fournit une méthode pour accéder aux données internes d'un objet. Les données internes sont un tableau de mémoire ou un tampon.
Le protocole de tampon permet à un objet de rendre public ses données internes (tampon), et un autre peut accéder à ces tampons sans copie intermédiaire.
Nous ne pouvons que dans C-Accéder à ce protocole au niveau API, sans utiliser notre bibliothèque de code conventionnelle.
Par conséquent, pour rendre le même protocole public pour les bibliothèques de code Python normales, il est nécessaire d'utiliser la vue en mémoire.
La vue en mémoire est une méthode sécurisée pour le protocole de tampon public en Python.
Il vous permet d'accéder au tampon interne de l'objet en créant un objet de vue en mémoire.
Nous devons nous souvenir que chaque fois que nous exécutons certaines opérations sur un objet (appeler une fonction de l'objet, couper un tableau), Python doit créerl'objetdeCopie.
Si nous devons traiter de grandes quantités de données (par exemple, les données binaires d'une image), il n'est pas nécessaire de créer des copies inutiles de grandes quantités de données, ce qui est presque inutile.
En utilisant le protocole de tampon, nous pouvons accorder un accès à un autre objet pour utiliser/Modifier de grandes données sans les copier. Cela permet aux programmes d'utiliser moins de mémoire et d'accélérer les performances.
Pour utiliser le protocole de b缓冲 memoryview(), nous utilisons la syntaxe suivante :
memoryview(obj)
La fonction memoryview() utilise un seul paramètre :
obj-to publicly expose its internal data. The object must support the buffer protocolbytes,bytearray)
The memoryview() function returns a memory view object.
#Random bytearray random_byte_array = bytearray('ABC', 'utf)-8) mv = memoryview(random_byte_array) # Access the zeroth index of memory view print(mv[0]) # Create bytes from memory view print(bytes(mv[0:2)) # Create a list from memory view print(list(mv[0:3))
Output result
65 b'AB' [65, 66, 67]
Here, we take the byte arrayrandom_byte_arraycreated a memory view objectmv.
Then, we accessmvthe 0th index, 'A' and print it (giving the ASCII value-65)
Similarly, we start from 0 and1 Accessmvof the index 'AB', and convert it to bytes.
Finally, we accessed all the indices of mv and converted them to a list. Since the internal byte array stores the ASCII values of letters, the output is a list of ASCII values of A, B, and C.
# Random bytearray random_byte_array = bytearray('ABC', 'utf)-8) print('Before update:', random_byte_array) mv = memoryview(random_byte_array) # Update the first index of mv to Z mv[1] = 90 print('After update:', random_byte_array)
Output result
Before update: bytearray(b'ABC') After update: bytearray(b'AZC')
Here, we update the first index of the memory view to90, that is, the ASCII value Z.
due to the memory view objectmvreference the same buffer/memory, so updatemv inthe index will also be updatedrandom_byte_array.