Я не понимаю, почему:

len(b'123') == 3
import sys
sys.getsizeof(b'123') == 36

Что такое b'123'?

0
chris 14 Янв 2021 в 12:41

2 ответа

Лучший ответ

Как заявил @jonrsharpe, b'123' - это неизменяемая последовательность байтов, в данном случае 3 байта. Ваше замешательство, похоже, связано с тем, что len() и sys.getsizeof(b'123') - не одно и то же.

len() запрашивает количество элементов, содержащихся в контейнере. Для строки, содержащей количество символов, в вашем случае у вас есть 3 байта, поэтому ее длина будет 3.

Возвращает длину (количество элементов) объекта. Аргументом может быть последовательность (строка, кортеж или список) или отображение (словарь).

sys.getsizeof(), с другой стороны, возвращает размер памяти объекта , это означает, что вы получаете не только размер байтов , но и полный объект, также есть свои методы, атрибуты, адреса ... которые рассматриваются в этом размере.

Вернуть размер объекта в байтах. Объект может быть объектом любого типа. Все встроенные объекты будут возвращать правильные результаты, но это не должно выполняться для сторонних расширений, поскольку это зависит от реализации.

2
Shunya 14 Янв 2021 в 10:05

Использование b перед 123 указывает, что литерал должен стать байтовым литералом, а не строковым литералом.

str литералы = последовательность символов Юникода (Latin-1, UCS-2 или UCS-4, в зависимости от самого широкого символа в строке)

bytes литералы = последовательность октетов (целые числа от 0 до 255)

Проще говоря, вы используете str для текста и bytes для двоичных данных низкого уровня.

0
Sam Grosz 14 Янв 2021 в 09:55
65716589