Có một thành ngữ phổ biến để tránh vô nghĩa sao chép lát đối với trường hợp như thế này:Tránh sao chép lát không cần thiết trong Python
>>> a = bytearray(b'hello')
>>> b = bytearray(b'goodbye, cruel world.')
>>> a.extend(b[14:20])
>>> a
bytearray(b'hello world')
Dường như với tôi rằng có một bản sao không cần thiết xảy ra khi lát b[14:20]
được tạo ra. Thay vì tạo một lát mới trong bộ nhớ để cung cấp cho extend
Tôi muốn nói "chỉ sử dụng phạm vi này của đối tượng hiện tại".
Một số phương pháp này sẽ giúp bạn ra ngoài với các thông số lát, ví dụ 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
nhưng với nhiều người, như extend
trong ví dụ đầu tiên của tôi, không có tính năng này.
Tôi nhận ra rằng đối với nhiều ứng dụng tôi đang nói đến sẽ là tối ưu hóa vi mô, vì vậy trước khi có ai đó hỏi - vâng, tôi đã lược tả đơn đăng ký của mình và điều đáng lo ngại cho trường hợp của tôi.
Tôi có một 'giải pháp' bên dưới, nhưng mọi ý tưởng hay hơn đều được chào đón nhiều nhất.
bộ đệm là lựa chọn tốt cho các đối tượng hỗ trợ giao diện đệm. Thông thường nó không có giá trị vỏ đặc biệt cho các trường hợp nhỏ (trừ khi hầu hết các trường hợp sử dụng của bạn là nhỏ) vì 50% nhiều hơn một số lượng nhỏ vẫn là một số lượng nhỏ –