前言:
在这篇Python字符集和字符编码中我们提到了unicode,该字符集对世界上的文字进行了系统的整理,让计算机可以用统一的方式处理文本,而且目前已经支持超过13万个字符,天然地支持多国语言。
所以不管什么文字,都可以用一个unicode来表示。
但是问题来了,unicode能表示这么多的字符,那么占用的内存一定不低吧。的确,根据当时的编码,一个unicode字符最高会占用到4字节。但是对于西方人来说,明明一个字符就够用了,为啥需要那么多。
于是又出现了utf-8,它是为unicode提供的一个新的编码规则,具有可变长的功能。不同种类的字符占用的大小不同,比如英文字符使用一个字节存储,汉字使用3个字节存储,Emoji 使用4个字节存储。
但Python在表示unicode字符串时,使用的却不是utf-8编码,至于原因我们下面来分析一下。
unicode 的三种编码
从Python3开始,字符串使用的是Unicode。而根据编码的不同,Unicode的每个字符最大可以占到4字节,从内存的角度来说, 这种编码有时会比较昂贵。
为了减少内存消耗并且提高性能,Python的内部使用了三种编码方式来表示Unicode:
- Latin-1 编码:每个字符一字节;
- UCS2 编码:每个字符两字节;
- UCS4 编码:每个字符四字节;
在Python编程中,所有字符串的行为都是一致的,而且大多数时间我们都没有注意到差异。然而在处理大文本的时候,这种差异就会变得异常显著、甚至有些让人出乎意料。
为了看到内部表示的差异,我们使用sys.getsizeof函数,查看一个对象所占的字节数。
import sys
print(sys.getsizeof("a")) # 50
print(sys.getsizeof("憨")) # 76
print(sys.getsizeof("
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何调用 Java 的 main 函数?(java main函数怎么调用)
- 如何在 Java 中有效地使用 EventHandler?(如何在Java中使用EventHandler)
- Java 中抽象类的性能考量究竟是怎样的?(抽象类在Java中的性能考量)
- 在多线程环境中怎样高效使用 try-catch-finally?(在多线程环境中如何使用try-catch-finally)
- 如何利用静态局部变量来达成单例模式?(怎样通过静态局部变量实现单例模式)
- Java 中二维数组声明的具体方法有哪些?(java二维数组声明的方法是什么)
- 如何在 Java 中获取 Word 文档内容?(java怎么获取word文档内容)
- 如何在 Java 集成测试中应用 Spock 框架?(Spock框架在Java集成测试中的应用)
- Dapr 究竟为 Java 生态系统带来了哪些贡献?(Dapr对Java生态系统有何贡献)
- 如何在 Java 中解析 XML 字符串?(java怎么解析xml字符串)