Python字符串底层原理

什么是字符串

字符串是编程语言中用于描述信息的一段字符。

Python 中通过双引号,单引号,三对引号包含起来的一串字符表示字符串,Python内部提供了一个关键字str用来描述字符串类型。

字符串的编码

计算机中描述和正确在屏幕上展示字符数据,需要将字符数据通过二进制的表示方式完成数据的排列,计算机解释二进制数据排列时,就可以通过像素点完成字符的正确展示。如下图所示:通过二进制数据序列描述具体展示字符的方式,称为字符编码

img

字符编码,最原始的字符串是从 M 国的第一台计算机诞生后出现的,可以通过 ASCII编码 描述常见的英文字母,数字和少量的特殊符号

计算机开始向西欧国家扩散后,西欧国家使用的字符要在计算机中正确的表示,仅仅依靠 ASCII 编码不能实现,于是出现了西欧字符编码(Latin1编码,官方术语:ISO-8859-1编码

计算机开始在天朝出现时,为了正确的在计算机中表示汉字,出现了国家标准编码,第一代国家标准编码可以正常的表示常见的简体中文,又发展出了 GB2312编码 可以表示常见的简体汉字以及繁体汉字,随后发展出了 GB18030编码可以表示 56 个民族同胞的字体,最终发展出了 GBK编码,描述的字体就更加完善了!由于台湾省使用的都是繁体中文,也出现了一种描述繁体中文的 BIG5编码

始皇大帝当年看到中原大地不同的地区使用的文字不一样,驾车车轨宽度不一样,造成了不同地区的人通商困难的问题,直接导致经济的落后,于是颁布了法令:书同文车同轨,统一了度量衡。

计算机行业中编码的问题出现了同样的乱象,导致不同国家的计算机中的数据不同,相互无法通信,限制了计算机的使用,民间成立了一个组织:欧洲计算机制造协会联盟,专门规范计算机行业的各种标准,如编码。

计算机的字符编码,迎来了自己的春天,所有的字符统一使用一种格式编码(英文字符,拉丁文字符 … 天朝最难捉摸的汉字),简称 统一字符编码 | 万国码 | Unicode编码,是一种编码标准,使用1个字节到4个字节变长的数据来表示任意一个字符。

计算机网络发展过程中,为了让数据在计算机网线中传输,需要通过 Unicode编码来规范一种能使用的编码方式: Unicode Transfer Format 8bit(使用8位为一个单位在网络中传输数据的方式),简称 UTF-8编码

常见的编码格式

  • ASCII编码:表示英文字母、数字、少量的特殊符号
  • ISO-8859-1编码 | latin1编码:表示常用的西欧字符、数字和特殊符号
  • GBK编码:正常描述英文字母、数字、特殊符号、汉字(简体/繁体)…
  • Unicode编码:统一字符编码,可以描述任意字符,是一种编码语法标准
  • UTF-8编码:Unicode编码的实现方式。

字符串的解码和编码方式

  • 字符串.encode(“UTF-8”):将一个字符串通过制定的编码,编码成二进制数据
  • 二进制数据.decode(“UTF-8”):将一个二进制字符数据,通过指定格式解码成字符串

img

字符串的声明和内存分布

由于字符串在项目开发中使用最多的数据类型,所以 Python在解释器层面对字符串进行了一定的优化。

字符串的直接声明 --> 内存分布

给一个变量赋值字符串,赋值之前先会去内存中的 [静态区] 查询要赋值的字符串是否已经存在,如果存在的话直接将该变量指向字符串的内存地址,如果不存在的话,在静态区直接创建新的字符串并将内存地址传给变量。

img

字符串时不可变数据类型 --> 内存分布

Python标准语法中,不支持字符串直接修改内部数据。

img

字符串的拼接 --> 内存分布

字符串直接通过引号声明赋值,会在静态区分配内存创建数据
字符串通过拼接运算进行赋值,会在堆内存中完成运算处理结果的内存分配,如下图

img

字符串与整数的差异?

img

发布了44 篇原创文章 · 获赞 5 · 访问量 2436

猜你喜欢

转载自blog.csdn.net/qq_36078992/article/details/105376631