Pregled pomnilnika Python ()

Funkcija memoryview () vrne predmet pogleda pomnilnika danega argumenta.

Preden preidemo v pomnilniške poglede, moramo najprej razumeti Pythonov protokol medpomnilnika.

Protokol medpomnilnika Python

Protokol medpomnilnika ponuja način dostopa do notranjih podatkov predmeta. Ti notranji podatki so pomnilniško polje ali medpomnilnik.

Protokol medpomnilnika omogoča enemu objektu, da izpostavi svoje notranje podatke (vmesne pomnilnike), drugemu pa dostop do teh vmesnih pomnilnikov brez vmesnega kopiranja.

Ta protokol nam je dostopen samo na ravni C-API in ne uporabljamo običajne kode.

Torej, da bi isti protokol izpostavili običajni kodni bazi Python, so prisotni pogledi pomnilnika.

Kaj je pogled na pomnilnik?

Pogled pomnilnika je varen način razkritja vmesnega protokola v Pythonu.

Omogoča vam dostop do notranjih medpomnilnikov predmeta z ustvarjanjem predmeta pomnilniškega pogleda.

Zakaj so pomembni pogledi medpomnilnika in pomnilnika?

Zapomniti si moramo, da mora Python, kadarkoli izvedemo neko dejanje na predmetu (pokličemo funkcijo predmeta, razrezati matriko), ustvariti kopijo predmeta .

Če imamo velike podatke, s katerimi lahko delamo (npr. Binarni podatki slike), bi po nepotrebnem ustvarili kopije ogromnih kosov podatkov, ki skoraj ne koristijo.

S protokolom vmesnega pomnilnika lahko drugemu objektu omogočimo uporabo / spreminjanje velikih podatkov, ne da bi jih kopirali. Zaradi tega program porabi manj pomnilnika in poveča hitrost izvajanja.

Sintaksa pomnilnika Python ()

Za razkritje medpomnilniškega protokola uporabljamo memoryview()to sintakso:

 memoryview (obj)

parametri memoryview ()

memoryview()Funkcija ima en sam parameter:

  • obj - objekt, katerega notranji podatki bodo izpostavljeni. objmora podpirati protokol medpomnilnika (bytes, bytearray)

Vrni vrednost iz memoryview ()

memoryview()Vrne pogled spomin predmet.

Primer 1: Kako memoryview () deluje v Pythonu?

 #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)))

Izhod

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

Tu smo ustvarili pomnilniški predmet mv iz bajtnega polja random_byte_array.

Nato smo dostopali do indeksa mv 0 'A'in ga natisnili (kar daje vrednost ASCII - 65).

Spet smo dostopali do indeksov mv od 0 in 1 'AB'in jih pretvorili v bajte.

Na koncu smo dostopali do vseh indeksov mv in ga pretvorili v seznam. Ker interno bytearrayshranjuje vrednost ASCII za abecede, je rezultat rezultat ASCII vrednosti A, B in C.

Primer 2: Spremenite notranje podatke s pomočjo pomnilniškega pogleda

 # 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)

Izhod

 Pred posodobitvijo: bytearray (b'ABC ') Po posodobitvi: bytearray (b'AZC') 

Tu smo posodobili prvi indeks pomnilniškega pogleda na 90, vrednost ASCII Z.

Ker se objekt pomnilniškega pogleda mv sklicuje na isti medpomnilnik / pomnilnik, posodabljanje indeksa v mv posodablja tudi random_byte_array.

Zanimive Članki...