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

2025-04-10 09:46:00
admin
原创
18
摘要:问题描述:当我运行下面的代码时,我分别得到了 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用