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

Afs*_*ani 3 python

这个问题可能看起来很傻,但是,我有一个/tmp/size.txt这样的内容:

hello
Run Code Online (Sandbox Code Playgroud)

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

sys.getsizeof(b'hello')
# OR
sys.getsizeof(bytes(bytearray('hello')))
# OR
sys.getsizeof(bytes('hello'))
Run Code Online (Sandbox Code Playgroud)

它返回42

是什么之间的区别os.path.getsizesys.getsizeof

cda*_*rke 7

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

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

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