python中无论输入什么都会以字符串方式保存吗,python读取字符串存入数组

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: