Всякий раз, когда объект Python должен быть сохранен или отправлен по сети, он сначала сериализуется. Я думаю, причина в том, что хранение и сетевая передача основаны на битах. У меня есть глупый вопрос, который больше похож на вопрос основы информатики, чем на вопрос о python. Каким форматом занимаются объекты python, когда они находятся в кеше? Разве они не представляют собой биты? Если это так, почему бы просто не использовать эти биты для хранения или отправки объекта и почему нужно сериализовать?Сохранение данных на Python
ответ
Бит Представление
Тот же объект может иметь различные представления в Биты на разных машинах:
- Подумайте порядок байт (байт-заказ)
- и архитектура (32 бита, 64 укуса)
Таким образом, представление объекта в Биты на машине-отправителе ничего не могут означать, (или, что еще хуже, может означать что-то еще), когда они получены на приемнике.
Возьмет простое число, 1025, в качестве иллюстрации проблемы:
- На Big Endian машины Биты представления:
- двоичные:
00000000 00000000 00000100 00000001
- шестнадцатеричный:
0x00000401
- двоичные:
- в то время как на небольшом Endian m achine:
- двоичная:
00000001 00000100 00000000 00000000
- шестнадцатеричное
0x01040000
- двоичная:
Вот почему, чтобы понять друг друга, 2 машины должны договориться о соглашении, протокол. Для протокола IP соглашение должно использовать, например, сетевой порядок байтов (big-endian).
Больше на in this question байтов
сериализации (и десериализации)
Мы не можем напрямую отправить объект, лежащий в основе представление битов в сети, по причинам, описанным выше, но не только.
Объект может ссылаться на другой объект внутри, через указатель (адрес в памяти этого второго объекта). Этот адрес, опять же, зависит от платформы.
Python решает это, используя алгоритм сериализации, называемый травлением, который преобразует иерархию объектов в байтовый поток. Этот байтовый поток, отправляемый по сети, по-прежнему зависит от платформы, и поэтому для обоих целей необходим протокол для понимания друг друга.
Означает ли это сериализацию python, например. процесс рассола преобразует биты в другой формат бит, который можно понять универсально всеми машинами? На высоком уровне вы можете пролить свет на то, как это реализовано? –
@ David я обновил свой ответ с кратким объяснением о сериализации пути python, травление – arainone
просто сделал то, что вы сказали, разделив комментарий на два. Чтобы лучше понять идею, могу ли я сделать такую аналогию. Машины, использующие различное представление битов, похожи на две страны, использующие разный блок длины. Например, страна A использует ногу, а страна B использует passus. Обе страны знают, как конвертировать все свои собственные единицы и измеритель единицы измерения длины. Страна A просит страну B изготовить то, что составляет 1 фут. Это невозможно, потому что никто в стране B не понимает, как долго стоит 1 фут. –
Ключевым моментом для I/O является достижение interoperability, например, JSON, который вы отправляете по сети, возможно, потребуется передать по протоколу HTTP, а затем проанализировать JavaScript. И данные, которые вы храните на диске, возможно, потребуется прочитать при следующем запуске Python (другая среда выполнения, распределение памяти, ...).
Но для выполнения кода вы обычно хотите достичь более высокого уровня performance, чем то, что было бы возможно с использованием совместимых форматов, например. используя адреса ячейки памяти для доступа к методам объектов, элементам dict, ... или максимально оптимизируйте для processor cache.
Подробнее о том, как именно реализован python, вы можете посмотреть на один из interpreter implementations.
- 1. Python sqlite3 сохранение данных
- 2. Сохранение данных пользователя в Python
- 3. Сохранение данных локально в Python
- 4. Maya MEL/Python Сохранение данных
- 5. Сохранение данных python для приложения
- 6. Сохранение данных .csv в Python
- 7. Сохранение данных и вызовов данных python
- 8. Сохранение данных на iCloud
- 9. Сохранение данных на android
- 10. Сохранение данных в wordgame в python
- 11. Сохранение данных в Python без текстового файла?
- 12. сохранение данных в CSV в python 2
- 13. Python Сохранение двоичных данных в файле на диске
- 14. Сохранение исторических данных на складе name.csv с использованием python
- 15. Сохранение данных csv на Python с дополнительным разрывом строки
- 16. Запуск сценария python на сервере и сохранение данных в облаке
- 17. Python: создание таблицы лидеров и сохранение данных
- 18. Сохранение и загрузка данных в Python 3
- 19. Python socket - сохранение данных из сокета
- 20. Сохранение Python словаря данных в формате CSV
- 21. Сохранение структур данных Scala на диске
- 22. Сохранение данных на сервере ASP.NET
- 23. Сохранение данных POST на СЕССИИ
- 24. Сохранение данных на Plist файл
- 25. Сохранение данных на веб-сервере
- 26. Сохранение данных на сессии WooCommerce
- 27. Сохранение данных Excel на Sharepoint
- 28. Сохранение данных на локальном компьютере
- 29. Сохранение переменных данных на диск
- 30. Android Сохранение данных на кнопке
Быстрый ответ: * биты *, которые вы упомянули, должны быть очень зависимыми от платформы. – starrify
@starrify. Можете ли вы объяснить больше об этом или можете ли вы показать мне статью или книгу, которые объясняют это хорошо? Благодаря! –