python序列化中的字符串,列表,字典,类的序列化解释

yuaneuro • 2020 年 03 月 07 日

我们知道现在各大语言都有其序列化数据和反序列的方式,

比如php的serialize和unserialize函数

Python当然也有,官方库里提供了一个叫做pickle的库

字符串的序列化解释

import pickle

x = "yuaneuro"

y = pickle.dumps(x) # 序列化

print(y)

上面例子中pickle序列化python的一个字符串

运行结果:

b'\x80\x03X\x08\x00\x00\x00yuaneuroq\x00.'

解释:

最前面的b' ' 表示这是一个 bytes 对象

第一个字符\x80是一个操作码,是识别pickle协议

\x03就代表了pickle版本为第三版(python3实现的版本是第三版)

\x08\x00\x00\x00,值为8,表示后面的utf8编码的字符串的长度为8,即yuaneuro的长度为8

在后面接yuaneuro

再往后是q\x00,给参数做索引用

最后的.代表结束

元组(tuple)的序列化解释

import pickle

x = ('bar','foo')

y = pickle.dumps(x) # 序列化

print(y)

上面例子中pickle序列化python的一个元组

运行结果:

b'\x80\x03X\x03\x00\x00\x00barq\x00X\x03\x00\x00\x00fooq\x01\x86q\x02.''

解释:

前面的字符串的序列化一样

在两个字符串的结尾加了\x86操作码,意思是"利用栈顶的两个元素(即bar和fo'o)建立一个元组

q\x02标识该元组在memo的索引

列表(list)的序列化解释

import pickle

x = ['bar','foo']

y = pickle.dumps(x) # 序列化

print(y)

上面例子中pickle序列化python的一个列表

运行结果:

b'\x80\x03]q\x00(X\x03\x00\x00\x00barq\x01X\x03\x00\x00\x00fooq\x02e.'

解释:

在\x03的后面是一个]操作符,意思是在栈上建立一个空list

q\x00是这个列表在memo的索引

从(开始到e操作符前面的内容用来构建list

字典(dict)的序列化解释

import pickle

x = {'name':'yuaneuro', 'age':'20'}

y = pickle.dumps(x) # 序列化

print(y)

上面例子中pickle序列化python的一个字典

运行结果:

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00yuaneuroq\x02X\x03\x00\x00\x00ageq\x03X\x02\x00\x00\x0020q\x04u.'

解释:

在\x03的后面是一个}操作符,意思是在栈上建立一个空dict

q\x00表明了这个dict在memo区的索引

从}开始到u操作符前面的内容用来构建dict

类(class)的序列化解释

import pickle

class Student(object):

name = 'yuaneuro'

age = '20'

y = pickle.dumps(Student())

print(y)

上面例子中pickle序列化python的一个类

运行结果:

b'\x80\x03c__main__\nStudent\nq\x00)\x81q\x01.'

解释:

c操作符,用来导入模块中的标识符,模块和标识符之间用\n隔开

那么这里的意思就是导入了main模块中的Student类

q\x00代表了Student类在memo的索引

随后是)在栈上建立一个新的元组,这个元组存储的是新建对象时需要提供的参数,因为本例中不需要参数,所以这个元组为空

\x81操作符,该操作符调用cls.__new__方法来建立对象,该方法接受前面元组中的参数

介绍完这些,我将在下一篇博客中介绍反序列化漏洞及其任意代码执行

python字典序列化是什么意思_python序列化中的字符串,列表,字典,类的序列化解释...相关推荐

  1. Python同Java同Js语言语法区别之四判断字符串列表字典是否相等

    字符串列表字典是否相等 前言 Python 字符串or数字 列表 字典 总结 Java 字符串 数组 Map 总结 JS 字符串 数组 对象 总结 前言 作为一枚测开工程师,需要的技能是全栈的,项目中 ...

  2. python settings模块导入不了_python settings 中通过字符串导入模块

    1. 项目文件结构 set_test ├─ main.py # 入口函数 │ ├─notify # 自定义的模块 │ ├─ email.py # 自定义模块 │ ├─ msg.py # 自定义模块 │ ...

  3. python字符串筛选输出_如何在Python中过滤字符串列表

    Python使用列表数据类型在顺序索引中存储多个数据.它的工作方式类似于其他编程语言的数字数组.filter()方法是Python的一种非常有用的方法.可以使用filter()方法从Python中的任 ...

  4. python怎么读数据库的数据_python从数据库读取出来的字典怎么更加方便的插入数据库...

    其他的SQL不清楚, pymysql是没有类似函数的. 说到框架,python常用的几个ORM, 我印象中也没有提供类似写法的. 既然没人写,而你又在php里觉得这么用趁手,不如自己按php的思路实现 ...

  5. json和python中字典的区别和联系_Python中 json字符串和字典的区别

    一.前言 工作或学习中,相信很多同学跟我一样,对于json字符串和字典两者的概念一直摸棱两可.emmm,既然不懂,那我们查资料并整理下来. 二.json字符串和字典的区别 简单粗暴地说,字典是一种数据 ...

  6. python字符串/列表/字典互相转换

    字符串与列表 字符串转列表 1.整体转换 str1 = 'hello world' print(str1.split('这里传任何字符串中没有的分割单位都可以,但是不能为空')) # 输出:['hel ...

  7. python不完全支持面向对象程序设计_Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】...

    本文实例讲述了Python面向对象程序设计OOP.分享给大家供大家参考,具体如下: 类是Python所提供的最有用的的工具之一.合理使用时,类可以大量减少开发的时间.类也在流行的Python工具中使用 ...

  8. python给两个列表排序方法_Python连接两个字符串列表并对其元素排序的最佳方法...

    假设我有两个字符串列表:x=['a','b'] and b=['c','d'] 我需要的最终结果是: ^{pr2}$ 重要的一点是,我希望对列表元素的字母进行排序.在这里,他们是建设,但在我的实际问题 ...

  9. python3 字符串 列表 字典 转换

    1.字符串转列表 str1 = "12345" list1 = list(str1) print list1 str2 = "123 sjhid dhi" li ...

  10. python输出关键字的行号_python – 使用关键字行号创建字典

    我试图通读一个txt.file并打印关键字出现的行号.这是我到目前为止所拥有的: def index(filename, word_lst): dic = {} line_count = 0 for ...

最新文章

  1. 单纯形法(四)理论部分(终结)
  2. C 语言指针 5 分钟教程
  3. 如何在 SAP 电商云里设置 Time Restrictions
  4. 数据库笔记2:SQL运算符
  5. Unity学习笔记:unity介绍(一)
  6. java保存图书每日的交易记录
  7. 服务器看端口信息命令行,服务器查看端口命令行
  8. 【Android -- 开源库】BRVAH 的基本使用
  9. TMQ:定时消息队列原理与实现
  10. 计算机录制视频的方法,怎么录制电脑屏幕视频步骤(电脑录屏的方法有4种)...
  11. TeamViewer设备数量受限的解决办法
  12. html svg 线条动画,HTML5 SVG图形轮廓线条绘制动画插件-vivus
  13. 低代码到底是银弹,还是行业毒瘤?
  14. java代码实现短信接受验证码
  15. configure: error: Support for POSIX ACLs is required
  16. PHP论坛开发技术总结
  17. DYA9面向对象中--super关键字
  18. 机器学习---回归模型和分类模型的评价指标体系
  19. Ubuntu(WSL)安装3b1b的manim
  20. php 背景图片上加载设备状态,PHP 将动态图片与固定背景图片合成并添加水印。...

热门文章

  1. L1-044 稳赢 - java
  2. 哈希算法--7-13 航空公司VIP客户查询 (25 分)
  3. 图文详解crond定时任务
  4. node.js+uniapp计算机毕业设计安卓仿网易云音乐客户端APP(程序+APP+LW)
  5. 四阶魔方java1002四阶魔方java_魔方小站四阶魔方视频教程 包你学会的魔方教程(魔方玩法视频教程+还原公式图解+3D动画)...
  6. TCGA数据库的学习-系列一
  7. Quaternion kinematics for the error-state Kalman filter论文阅读
  8. android 权限作用说明书,AndroidAcp 一句话搞定,简化 Android 6.0 系统复杂的权限操作 @codeKK Android开源站...
  9. 判断对象中属性值是否全为空
  10. Deep Learning and the Information Bottleneck Principle 深度学习与信息瓶颈原理