为什么sys.getsizeof()在Python中的file.read([size])中不返回[size]

撒母耳

我有一个很大的二进制文件,我想使用struct.unpack()进行读取和解压缩。该文件由许多行组成,每行2957字节长。我使用以下代码读取了文件:

with open("bin_file", "rb") as f:
    line = f.read(2957)

我的问题是,为什么尺寸返回:

import sys
sys.getsizeof(line)

不等于2957(在我的情况下是2978)?

马丁·彼得斯(Martijn Pieters)

你误解是什么sys.getsizeof() 它返回Python用于字符串对象的内存量,而不是行的长度。

Python字符串对象轨道引用计数,对象类型和其他元数据连同实际的字符,所以2978个字节是一样的东西作为字符串长度。

请参阅stringobject.h类型定义

typedef struct {
    PyObject_VAR_HEAD
    long ob_shash;
    int ob_sstate;
    char ob_sval[1];

    /* Invariants:
     *     ob_sval contains space for 'ob_size+1' elements.
     *     ob_sval[ob_size] == 0.
     *     ob_shash is the hash of the string or -1 if not computed yet.
     *     ob_sstate != 0 iff the string object is in stringobject.c's
     *       'interned' dictionary; in this case the two references
     *       from 'interned' to this object are *not counted* in ob_refcnt.
     */
} PyStringObject;

其中PyObject_VAR_HEAD被定义在object.h,其中标准ob_refcntob_type并且ob_size都被定义的字段。

因此,长度为2957的字符串需要2958个字节(字符串长度+空),剩下的20个字节将用于保存引用计数,类型指针,对象“大小”(此处为字符串长度),缓存的字符串哈希和实习状态标志。

其他对象类型将具有不同的内存占用,并且所使用的C类型的确切大小也因平台而异。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Why does sys.getsizeof() not return [size] in file.read([size]) in Python

来自分类Dev

python sys getsizeof返回字符串是什么?

来自分类Dev

为什么sys.getsizeof对于非常大的列表返回相同的输出

来自分类Dev

为什么我不能在/ sys中创建目录

来自分类Dev

为什么rsync在Linux中无法从/ sys复制文件?

来自分类Dev

为什么要减去vector :: size并先将其存储到变量中,而不返回不同的结果?

来自分类Dev

为什么当前目录中的sys.py不中断“ import sys”

来自分类Dev

在Shiny for R中,为什么Sys.Date()在dateInput中返回昨天的日期?

来自分类Dev

为什么我不能连续两次在sys.stdin中执行循环?(Python)

来自分类Dev

为什么 sys.stdout(在 python 中)没有恢复到默认值的默认方法

来自分类Dev

为什么strncpy()不遵守给定的size_t n(在temp2中为10)?

来自分类Dev

为什么我需要“ sys.argv”在PyQt中启动QApplication?

来自分类Dev

为什么在Azure SQL sys.event_log表中没有“ additional_data”?

来自分类Dev

为什么Relation.size有时会在Rails 4中返回哈希

来自分类Dev

为什么此函数在 Python 中不返回列表?

来自分类Dev

为什么getsizeof(pandas.DataFrame)与计算机中的文件不同?

来自分类Dev

为什么sys.stdin中的字符串与脚本中的硬编码字符串不同?

来自分类Dev

为什么不能使用System.map中的system_wq来导出sys_call_table的地址?

来自分类Dev

为什么在/ sys / devices / system / edac / mc中没有mc0文件夹

来自分类Dev

为什么单选按钮的size()在硒中显示为0?

来自分类Dev

/ proc / partitions和/ sys / dev / block / <block> / size中的值是什么单位?

来自分类Dev

Map中Set的通配符-返回类型不兼容-为什么?

来自分类Dev

为什么pause(2)在辅助线程中不返回?

来自分类Dev

为什么intern方法在Java中不返回相等的String

来自分类Dev

为什么Swift中的数组索引不返回可选值?

来自分类Dev

为什么systemctl在NRPE检查中不返回值?

来自分类Dev

为什么findAll()不返回模型中的所有对象?

来自分类Dev

为什么grep在C ++中不返回TRUE?

来自分类Dev

为什么函数在C中不返回负值?

Related 相关文章

  1. 1

    Why does sys.getsizeof() not return [size] in file.read([size]) in Python

  2. 2

    python sys getsizeof返回字符串是什么?

  3. 3

    为什么sys.getsizeof对于非常大的列表返回相同的输出

  4. 4

    为什么我不能在/ sys中创建目录

  5. 5

    为什么rsync在Linux中无法从/ sys复制文件?

  6. 6

    为什么要减去vector :: size并先将其存储到变量中,而不返回不同的结果?

  7. 7

    为什么当前目录中的sys.py不中断“ import sys”

  8. 8

    在Shiny for R中,为什么Sys.Date()在dateInput中返回昨天的日期?

  9. 9

    为什么我不能连续两次在sys.stdin中执行循环?(Python)

  10. 10

    为什么 sys.stdout(在 python 中)没有恢复到默认值的默认方法

  11. 11

    为什么strncpy()不遵守给定的size_t n(在temp2中为10)?

  12. 12

    为什么我需要“ sys.argv”在PyQt中启动QApplication?

  13. 13

    为什么在Azure SQL sys.event_log表中没有“ additional_data”?

  14. 14

    为什么Relation.size有时会在Rails 4中返回哈希

  15. 15

    为什么此函数在 Python 中不返回列表?

  16. 16

    为什么getsizeof(pandas.DataFrame)与计算机中的文件不同?

  17. 17

    为什么sys.stdin中的字符串与脚本中的硬编码字符串不同?

  18. 18

    为什么不能使用System.map中的system_wq来导出sys_call_table的地址?

  19. 19

    为什么在/ sys / devices / system / edac / mc中没有mc0文件夹

  20. 20

    为什么单选按钮的size()在硒中显示为0?

  21. 21

    / proc / partitions和/ sys / dev / block / <block> / size中的值是什么单位?

  22. 22

    Map中Set的通配符-返回类型不兼容-为什么?

  23. 23

    为什么pause(2)在辅助线程中不返回?

  24. 24

    为什么intern方法在Java中不返回相等的String

  25. 25

    为什么Swift中的数组索引不返回可选值?

  26. 26

    为什么systemctl在NRPE检查中不返回值?

  27. 27

    为什么findAll()不返回模型中的所有对象?

  28. 28

    为什么grep在C ++中不返回TRUE?

  29. 29

    为什么函数在C中不返回负值?

热门标签

归档