为什么sys.getsizeof不等于os.path.getsize?

时间:2016-12-02 11:42:54

标签: python

这个问题可能看起来很愚蠢,但我有/tmp/size.txt这个内容:

hello

os.path.getsize('/tmp/size.txt')6但是当我这样做时:

sys.getsizeof(b'hello')
# OR
sys.getsizeof(bytes(bytearray('hello')))
# OR
sys.getsizeof(bytes('hello'))

返回42

os.path.getsizesys.getsizeof之间有什么区别?

2 个答案:

答案 0 :(得分:4)

这两个在python中不兼容。 os.path.getsize给出文件的大小,而sys.getsizeof给出对象的大小。

该文件是6个字节,而不是5个,因为行结束(在Windows上它可能是7个字节)。如果你使用C然后"你好"将是6个字节,因为二进制零'\0'标记字符串的结尾。如果您使用的是另一种语言,那么它也会有自己的红带内存开销。

数据占用的内存(通常)小于对象占用的内存。对象将包括有关数据的其他信息,例如其大小和位置。这是您使用高级语言付出的代价。

答案 1 :(得分:0)

os.path.getsize以字节为单位返回文件大小。

sys.getsizeof返回在内存中存储str / bytes对象所需的字节数。 (由于结构数据,它比实际内容有开销)。