Python存储字符串
编程学习网 人气:0前言:
在这篇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("
加载全部内容
- 猜你喜欢
- 用户评论