Hat von dem wandelbaren bytearray
Typ des nicht-veränderbaren bytes
Typen Umwandlung eine Kopie entstehen? Sind damit irgendwelche Kosten verbunden, oder behandelt der Interpreter sie einfach als eine unveränderliche Byte-Sequenz, wie das Umwandeln einer char*
in eine const char* const
in C++?Wird beim Konvertieren von Bytearray in Byte eine Kopie erstellt?
ba = bytearray()
ba.extend("some big long string".encode('utf-8'))
# Is this conversion free or expensive?
write_bytes(bytes(ba))
unterscheidet sich diese zwischen Python 3, wo bytes
seine eigene Art und Python ist 2.7, wo bytes
nur ein Alias für str
ist?
Alle Operationen beinhalten * einige * Kosten. Sie können sich die Quelle ansehen, oder Sie können Zeittests verwenden, um zu sehen, ob die Zeit linear mit der Problemgröße ansteigt (was passieren würde, wenn eine Kopie erstellt würde). –
Ich bin mir ziemlich sicher, dass das Konvertieren von 'bytearray' in' bytes' eine Kopie verursacht. Dies liegt daran, dass, wenn die neuen "Bytes" auf das gleiche Hintergrundarray wie das "Bytearray" zeigen, dies nicht wirklich unveränderbar wäre. – Nayuki
Beachten Sie, dass Sie, wenn Sie eine Ansicht auf den Inhalt eines 'Bytearray' wollen, ohne eine Kopie zu erstellen, _can_ zu diesem Zweck einen' memoryview' verwenden können. Der Nachteil ist, dass Änderungen an den Bytearray-Daten die Daten in der Speicheransicht ändern und dass das Bytearray nicht geändert werden kann (keine Anhängen, Pops, Ändern der Slice-Zuweisung usw.) Solange exportierte Puffer (von denen "memoryview" der häufigste in Python-Level-Code erstellte Typ ist) vorhanden sind. – ShadowRanger