在python中一个数字占几个字节,python 字符串字节数

  在python中一个数字占几个字节,python 字符串字节数

  我的理解是os.urandom(size)输出一个给定‘大小’的随机字节串,但是:

  导入操作系统

  导入系统

  print(sys . getsizeof(OS . urandom(42)))

  75

  为什么这个不是42?

  还有一个相关的问题:

  导入base64

  导入binascii

  print(sys . getsizeof(base64 . b 64 encode(OS . urandom(42)))

  print(sys . get sizeof(binas CII . hexlify(OS . urandom(42)))

  八十九

  117

  数字

  为什么它们如此不同?哪种编码方式是存储字符串字节(比如os.urandom给出的)最高效的内存方式?

  编辑:如果这个问题是复制了Python中len()和sys.getsizeof()方法的区别,那么似乎是个大问题。我的问题不是关于len()和getsizeof()的区别。我对Python对象常用的内存很困惑,这个问题的答案已经为我澄清了。

  在第二个示例中,结果字符串的长度不同(base64和hex),因此它们不相等。您通常可以通过获取getsizeof()的结果并减去每个对象的len()来计算每个对象使用的内存量,因此在您的示例中,每个对象都有33个额外的字节。

  Python字符串对象不仅仅是组成它们的字符。它们是成熟的物体。因此,它们需要更多的空间来容纳对象的组件,例如类型指针(需要识别字节串是什么类型的对象)和长度(需要提高效率,因为python字节串可以包含空字节)。

  最简单的对象,即对象实例,需要空间:

  sys.getsizeof(object())

  16

  问题的第二部分只是因为b64encode()和hexlify()生成的字符串长度不同;后者的长度要长28个字符,这是sys.getsizeof()报告的值之差,不足为奇。

  S1=base64 . b 64 encode(OS . urandom(42))

  s1

   b ctlmjdm 9 q 7 ZP pgogqci 8 gr 0 igjsyzvjsp 4 owmmj 2 a 8 diawjctv/8 sta

  S2=binas CII . hexlify(OS . urandom(42))

  s2

   b c 82d 35 f 717507d 6 f 5 ff C5 EDA 1e 1 bfd 50 a 62689 c 08 ba 12055 a5c 39 f 95 b 93292 ddf 4544751 FBC 79564345

  镜头(s2) -镜头(s1)

  28

  sys . getsizeof(S2)-sys . getsizeof(S1)

  28

  数字

  除非使用某种形式的压缩,否则没有比现有的二进制字符串更有效的编码方式,尤其是在这种情况下,因为数据是随机的,而这本身是不可压缩的。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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