Esiste un linguaggio comune per evitare inutili fetta copia per casi come questo:Evitando inutili fetta copia in Python
>>> a = bytearray(b'hello')
>>> b = bytearray(b'goodbye, cruel world.')
>>> a.extend(b[14:20])
>>> a
bytearray(b'hello world')
Mi sembra che ci sia una copia inutile succede quando si crea la fetta b[14:20]
. Piuttosto che creare una nuova sezione in memoria per dare a extend
voglio dire "usa solo questo intervallo dell'oggetto corrente".
Alcuni metodi vi aiuterà fuori con i parametri fetta, ad esempio count
:
>>> a = bytearray(1000000) # a million zero bytes
>>> a[0:900000].count(b'\x00') # expensive temporary slice
900000
>>> a.count(b'\x00', 0, 900000) # helpful start and end parameters
900000
ma molti, come extend
nel mio primo esempio, non hanno questa caratteristica.
Mi rendo conto che per molte applicazioni quello di cui sto parlando sarebbe una micro-ottimizzazione, quindi prima che qualcuno chieda - sì, ho profilato la mia domanda, ed è qualcosa che vale la pena preoccupare per il mio caso.
Ho una "soluzione" di seguito, ma le idee migliori sono le benvenute.
il buffer è una buona scelta per gli oggetti che supportano l'interfaccia del buffer. Di solito non vale l'involucro speciale per i casi piccoli (a meno che la maggior parte dei casi d'uso siano piccoli) perché il 50% in più di una piccola quantità è ancora una piccola quantità –