Я не понимаю, почему:
len(b'123') == 3
import sys
sys.getsizeof(b'123') == 36
Что такое b'123'
?
2 ответа
Как заявил @jonrsharpe, b'123'
- это неизменяемая последовательность байтов, в данном случае 3 байта. Ваше замешательство, похоже, связано с тем, что len()
и sys.getsizeof(b'123')
- не одно и то же.
len()
запрашивает количество элементов, содержащихся в контейнере. Для строки, содержащей количество символов, в вашем случае у вас есть 3 байта, поэтому ее длина будет 3.
Возвращает длину (количество элементов) объекта. Аргументом может быть последовательность (строка, кортеж или список) или отображение (словарь).
sys.getsizeof()
, с другой стороны, возвращает размер памяти объекта , это означает, что вы получаете не только размер байтов , но и полный объект, также есть свои методы, атрибуты, адреса ... которые рассматриваются в этом размере.
Вернуть размер объекта в байтах. Объект может быть объектом любого типа. Все встроенные объекты будут возвращать правильные результаты, но это не должно выполняться для сторонних расширений, поскольку это зависит от реализации.
Использование b
перед 123
указывает, что литерал должен стать байтовым литералом, а не строковым литералом.
str
литералы = последовательность символов Юникода (Latin-1, UCS-2 или UCS-4, в зависимости от самого широкого символа в строке)
bytes
литералы = последовательность октетов (целые числа от 0 до 255)
Проще говоря, вы используете str
для текста и bytes
для двоичных данных низкого уровня.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.