python中无论输入什么都会以字符串方式保存吗,python读取字符串存入数组
本文主要介绍Python中字符串的存储。文章通过unicode扩展了题目的相关内容,有一定的参考价值,有需要的朋友可以参考一下。
00-1010 Unicode的三种编码为什么不用utf-8编码Latin-1,UCS2,UCS4应该用哪个?前言:概述
在这个Python字符集和字符编码中,我们提到了unicode。这套字符集系统地整理了世界上的字符,以便计算机统一处理文本。目前已经支持超过13万个字符,自然支持多种语言。
所以无论什么文本,都可以用一个unicode来表示。
但问题是,unicode可以表示这么多字符,所以它必须占用大量内存。的确,按照当时的编码,一个unicode字符最多会占用4个字节。但是对于西方人来说,显然一个字就够了。你为什么需要这么多?
于是utf-8又出现了,这是一种新的unicode编码规则,具有变长功能。不同类型的字符占据不同的大小。比如英文字符存储一个字节,中文字符存储三个字节,表情符号存储四个字节。
但是,Python在表示unicode字符串时不使用utf-8编码。至于原因,下面我们来分析一下。
目录
从Python3开始,字符串使用Unicode。根据编码的不同,Unicode的每个字符最多可以占用4个字节。从内存的角度来看,这种编码有时会更昂贵。
为了减少内存消耗并且提高性能,Python的内部使用了三种编码方式来表示Unicode:
Latin-1 编码:是每个字符一个字节;UCS2 编码:是每个字符两个字节;UCS4 编码:是每个字符四个字节;在Python编程中,所有字符串的行为都是一致的,大多数时候我们不会注意到区别。但是,在处理大型文本时,这种差异会变得极其显著,甚至出乎意料。
为了查看内部表示的差异,我们使用sys.getsizeof函数来检查一个对象占用的字节数。
导入系统
print(sys.getsizeof(a)) # 50
Print(sys.getsizeof (Han)) # 76
print(sys . getsizeof())# 80
我们都看到了一个人物,但是他们占据了不同的记忆。因为Python对不同的字符使用不同的编码,导致大小不一。
但需要注意的是:的每个字符串都需要占用49-80个额外的字节,因为它需要存储一些额外的信息,比如比如:.常见的头、哈希、长度、字节长度、编码类型等等
导入系统
#对于ASCII字符,1占用1个字节。很明显,编码是Latin-1。
print(sys . getsizeof( ab )-sys . getsizeof( a )# 1
#对于汉字,日语等。一个占用2个字节。这时,它是UCS2代码。
Print(sys.getsizeof(韩寒)-sys.getsizeof(韩寒)# 2
print(sys.getsizeof()-sys.getsizeof()# 2
#和表情符号一样,是4字节代码,此时是UCS4代码。
print(sys . getsizeof()-sys . getsizeof())# 4
但是,如果采用不同的代码,底层结构实例的多余部分也会占用不同大小的内存。
如果编码是Latin-1,那么这个结构实例的多余部分将占用49个字节;代码UCS2,占74字节;代码为UCS4,占76字节。然后字符串所占的字节数就等于:*单个字符占用的字节中的附加部分字符数。
导入系统
#所以一个空字符串占用49个字节
#此时将采用内存占用最小的Latin-1编码。
print(sys . getsizeof())# 49
#此时使用UCS2。
print(sys . getsizeof( Han )-2)# 74
# UCS4
print(sys.getsizeof(
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。