python 中 len() 和 sys.getsizeof() 方法有什么区别?

2025-04-10 09:46:00
admin
原创
52
摘要:问题描述:当我运行下面的代码时,我分别得到了 3 和 36 作为答案。x ="abd" print len(x) print sys.getsizeof(x) 有人能向我解释一下它们之间有什么区别吗?解决方案 1:它们根本不是一回事。len()查询容器中包含的项目数。对于字符串,其字符数为...

问题描述:

当我运行下面的代码时,我分别得到了 3 和 36 作为答案。

x ="abd"
print len(x)
print sys.getsizeof(x)

有人能向我解释一下它们之间有什么区别吗?


解决方案 1:

它们根本不是一回事。

len()查询容器中包含的项目数。对于字符串,其字符数为:

返回对象的长度(项数)。参数可以是序列(字符串、元组或列表)或映射(字典)。

sys.getsizeof()另一方面返回对象的内存大小:

返回对象的大小(以字节为单位)。对象可以是任何类型的对象。所有内置对象都会返回正确的结果,但第三方扩展不一定如此,因为它是特定于实现的。

Python 字符串对象不是简单的字符序列,每个字符占 1 个字节。

具体来说,该sys.getsizeof()函数包括垃圾收集器开销(如果有):

getsizeof()调用该对象的__sizeof__方法,并且如果该对象由垃圾收集器管理则增加额外的垃圾收集器开销。

字符串对象不需要被跟踪(它们不能创建循环引用),但字符串对象确实需要比每个字符的字节数更多的内存。在 Python 2 中,__sizeof__方法返回(在 C 代码中):

Py_ssize_t res;
res = PyStringObject_SIZE + PyString_GET_SIZE(v) * Py_TYPE(v)->tp_itemsize;
return PyInt_FromSsize_t(res);

其中PyStringObject_SIZE是该类型的 C 结构头大小,PyString_GET_SIZE基本上与 相同len()Py_TYPE(v)->tp_itemsize是每个字符的大小。在 Python 2.7 中,对于字节字符串,每个字符的大小为 1,但这PyStringObject_SIZE让您感到困惑;在我的 Mac 上,该大小为 37 字节:

>>> sys.getsizeof('')
37

对于unicode字符串,每个字符的大小最多为 2 或 4(取决于编译选项)。在 Python 3.3 及更新版本中,Unicode 字符串每个字符占用 1 到 4 个字节,具体取决于字符串的内容。

对于引用其他对象的容器(例如字典或列表),给定的内存大小涵盖容器使用的内存以及用于引用其他对象的指针值。没有直接的方法可以包含“包含的”对象的内存大小,因为这些相同的对象可能在其他地方有更多引用,并且不一定由单个容器拥有。

文档中是这样描述的:

只考虑直接归因于该对象的内存消耗,而不考虑其引用的对象的内存消耗。

如果您需要计算容器的内存占用量以及该容器引用的任何内容,则必须使用某种方法遍历那些包含的对象并获取它们的大小;文档指向一个递归配方。

解决方案 2:

主要区别在于 len() 将给出容器中元素的实际长度,而 sys.getsizeof() 将给出其占用的内存大小

有关更多信息,请阅读 Python 文档,网址为
https://docs.python.org/3/library/sys.html#module-sys

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3938  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2732  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   72  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   79  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   66  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用