返回顶部
首页 > 资讯 > 后端开发 > Python >Python内建类型str源码学习
  • 821
分享到

Python内建类型str源码学习

2024-04-02 19:04:59 821人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录引言1 Unicode2 python中的Unicode2.1 Unicode对象的好处2.2 Python对Unicode的优化3 Unicode对象的底层结构体3.1 PyA

引言

“深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型。

在介绍常用类型str之前,在上一篇博客:Python源码学习笔记:深入认识Python内建类型——bytes已经为大家介绍了和str息息相关的bytes的源码知识。这篇博客回味大家分析str相关的源码。

1 Unicode

计算机存储的基本单位是字节,由8个比特位组成。由于英文只由26个字母加若干符号组成,因此英文字符可以直接用字节来保存。但是其他语言(例如中日韩等),由于字符众多,不得不使用多个字节来进行编码。

随着计算机技术的传播,非拉丁文字符编码技术不断发展,但是仍然存在两个比较大的局限性:

  • 不支持多语言:一种语言的编码方案不能用于另外一种语言
  • 没有统一标准:例如中文就有GBK、GB2312、GB18030等多种编码标准

由于编码方式不统一,开发人员就需要在不同编码之间来回转换,不可避免地会出现很多错误。为了解决这类不统一问题,Unicode标准被提出了。Unicode对世界上大部分文字系统进行整理、编码,让计算机可以用统一的方式处理文本。Unicode目前已经收录了超过14万个字符,天然地支持多语言。(Unicode的uni就是“统一”的词根)

2 Python中的Unicode

2.1 Unicode对象的好处

Python在3之后,str对象内部改用Unicode表示,因此在源码中成为Unicode对象。使用Unicode表示的好处是:程序核心逻辑统一使用Unicode,只需在输入、输出层进行解码、编码,可最大程度地避免各种编码问题。

图示如下:

2.2 Python对Unicode的优化

问题:由于Unicode收录字符已经超过14万个,每个字符至少需要4个字节来保存(这里应该是因为2个字节不够,所以才用4个字节,一般不会使用3个字节)。而英文字符用ASCII码表示仅需要1个字节,使用Unicode反而会使频繁使用的英文字符的开销变为原来的4倍。

首先我们来看一下Python中不同形式的str对象的大小差异:

>>> sys.getsizeof('ab') - sys.getsizeof('a')
1
>>> sys.getsizeof('一二') - sys.getsizeof('一')
2
>>> sys.getsizeof('

--结束END--

本文标题: Python内建类型str源码学习

本文链接: https://lsjlt.com/news/118059.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python内建类型str源码学习
    目录引言1 Unicode2 Python中的Unicode2.1 Unicode对象的好处2.2 Python对Unicode的优化3 Unicode对象的底层结构体3.1 PyA...
    99+
    2024-04-02
  • Python内建类型str源码分析
    这篇文章主要讲解了“Python内建类型str源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python内建类型str源码分析”吧!1 Unicode计算机存储的基本单位是字节,由8...
    99+
    2023-06-30
  • Python内建类型list源码学习
    目录问题:1 常用方法小结:题外话:2 list的内部结构:PyListObject3 尾部操作和头部操作3.1 尾部操作3.2 头部操作4 浅拷贝和深拷贝4.1 浅拷贝4.2 深拷...
    99+
    2024-04-02
  • Python内建类型int源码学习
    目录1 int对象的设计1.1 PyLongObject1.2 整数的布局1.3 小整数静态对象池1.4 示例2 大整数运算2.1 整数运算概述2.2 大整数运算处理过程1.long...
    99+
    2024-04-02
  • Python内建类型float源码学习
    目录1 回顾float的基础知识1.1 PyFloatObject1.2 PyFloat_Type1.3 对象的创建1.4 对象的销毁1.5 小结2 空闲对象缓存池2.1 浮点对象的...
    99+
    2024-04-02
  • python学习系列--str类型
    str的内置方法。__contains__()        判断字符串中是否包含某特定字符。等同于'in'关键字。__format__()           字符串格式化。capitalize()             首字母大写。c...
    99+
    2023-01-31
    类型 系列 python
  • Python内建类型int源码分析
    今天小编给大家分享一下Python内建类型int源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问题:对于C语言,下面...
    99+
    2023-06-30
  • Python内建类型float源码分析
    这篇文章主要介绍“Python内建类型float源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python内建类型float源码分析”文章能帮助大家解决问题。1 回顾float的基础知识1....
    99+
    2023-06-30
  • Python内建类型dict源码分析
    本篇内容主要讲解“Python内建类型dict源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python内建类型dict源码分析”吧!深入认识Python内建类型—&...
    99+
    2023-07-05
  • python学习之变量类型
    变量:  变量是保存在内存中的值,根据变量类型开辟不同的内存空间且只允许符合该数据类型的数据才可以被存储在该内存空间中变量赋值:在Python中定义变量时,无需像其他语言一样需要声明数据类型。每个变量在内存中创建的时候都会包含变量的标识、名...
    99+
    2023-01-30
    变量 类型 python
  • python内建类型与标准类型
    目录前言理解对象和类型关于不可变类型和可变类型关于动态静态强弱类型标准类型其它内建类型类型的类型None ->空类型内建类型的布尔值前言 全可以访问相同的对象, 因此我们讲 这...
    99+
    2024-04-02
  • Python源码学习之PyObject和PyTypeObject
    前言 Python是C语言实现的,因此Python对象在C语言层面应该是一个结构体 ,组织对象占用的内存。 不同类型的对象,数据及行为均可能不同,因此可以大胆猜测:不同类型的对象由不...
    99+
    2024-04-02
  • Python数据类型学习笔记
    带你走进数据类型 一:整数、浮点数 Python中整数和浮点数的定义以及运算和C++都是一样的,我在这里就不需多说了,我就说明一点:Python相对于C/C++而言,定义整数没有int 和 long lon...
    99+
    2022-06-04
    数据类型 学习笔记 Python
  • Python内建类型bytes实例代码分析
    这篇文章主要讲解了“Python内建类型bytes实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python内建类型bytes实例代码分析”吧!1 bytes和str之间的关系不...
    99+
    2023-06-30
  • Python学习笔记6——动态类型
    参考博客:Python进阶09 动态类型  Python深入06 Python的内存管理 都是非常棒的文章 其实这都是我前两天通过手机看的博客,感觉get到了新知识、新技能,今天早上挖的坑,因为上午有课(电子技术课程设计,嵌入式系统实验室...
    99+
    2023-01-30
    学习笔记 类型 动态
  • Python学习手册之数据类型
     在上一篇文章中,我们介绍了 Python 的异常和文件,现在我们介绍 Python 中的数据类型。 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9979931.html 数据类型None 类...
    99+
    2023-01-30
    数据类型 手册 Python
  • python数学建模源码分析
    这篇文章主要介绍了python数学建模源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python数学建模源码分析文章都会有所收获,下面我们一起来看看吧。SciPy 学习'''Sc...
    99+
    2023-07-06
  • Python源码学习之PyType_Type和PyBaseObject_Type详解
    PyType_Type和PyBaseObject_Type PyObject和PyTypeObject内容的最后指出下图中对实例对象和类型对象的理解是不完全正确的, 浮点类型对象全...
    99+
    2024-04-02
  • Python学习 :六个标准数据类型
    一、Numbers(数字类型) 数字类型主要分为两种—— 整数(Integer)与 浮点数(Float) 整数分为整型和长整型(在Python3中已经不再区分为整型与长整型,统一称为整型) 注意:数字类型是不可变的数据类型       ...
    99+
    2023-01-30
    数据类型 标准 Python
  • 学习python的第五天(数据类型)
    一复习 1.查看数据类型 #数值10的位置 print(di(10)) #数值10的样式 print(type(10)) 2.关于变量的一些补充 a=1 b=1 c=1 #a,b,c三种位置判断 print(a is b is c) p...
    99+
    2023-01-31
    数据类型 第五天 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作