识别对象,为什么 id(...) 返回的值会改变?

2025-04-10 09:45:00
admin
原创
20
摘要:问题描述:id(对象)这是一个整数(或长整数),保证在该对象的生命周期内是唯一的并且恒定的。你能解释一下这个输出吗?为什么j的 ID 会改变?>>> i = 10 >>> id(i) 6337824 >>> j = 10 >>> id(j...

问题描述:

id(对象)

这是一个整数(或长整数),保证在该对象的生命周期内是唯一的并且恒定的。

你能解释一下这个输出吗?为什么j的 ID 会改变?

>>> i = 10
>>> id(i)
6337824
>>> j = 10
>>> id(j)
6337824
>>> j = j+1
>>> id(j)
6337800
>>> id(i)
6337824

这是否就像i对象j引用最初指向同一个对象,但是当j发生变化时,它们开始引用不同的对象?


解决方案 1:

因为整数是不可变的,所以每个整数值都是具有唯一 id 的不同对象。整数10具有与 不同的 id 11。执行此操作j = j+1不会更改现有整数对象的值,而是更改j为指向 的对象11

检查一下当我们独立创建一个新变量k并为其赋值时会发生什么11

>>> j = 10
>>> id(j)
8402204
>>> j = j+1
>>> id(j)
8402192
>>> k = 11
>>> id(k)
8402192

请注意,并非每个整数都有且只有一个对应的对象。这只发生在 Python 决定缓存的小整数上。大整数不会发生这种情况:

>>> x = 123456789
>>> id(x)
8404568
>>> y = 123456789
>>> id(y)
8404604

请参阅Python/C API 参考手册中的PyLong_FromLong :

当前实现为 -5 到 256 之间的所有整数保留一个整数对象数组,当您在该范围内创建一个整数时,实际上只是返回对现有对象的引用。

解决方案 2:

这就是为什么2**8 is 2**8 == True,和2**9 is 2**9 == False

-5 至 256 之间的值是预先分配的。

解决方案 3:

不同变量的相同之处id在于 Python 创建变量的方式。

id是对象在内存中位置的哈希值。Python 变量是对对象的引用id,而不是新对象。如果多个变量引用同一个对象,则它们具有相同的。

解决方案 4:

在 CPython 中,id一般是从Py_Object的指针值得出的,即它在内存中的位置。

解决方案 5:

j的 id 会因为 命名的对象发生j变化而变化。首先,您将其初始化j为 10,因此当您调用 时,id(j)您将获得 的 id 10。然后您将其设置j为 11,因此之后当您调用 时,id(j)您将获得 的 id 11

解决方案 6:

事实是,每个对象(值)在 Python 中都有一个唯一的 id,例如对象'hello''hi'有自己的 id 或者1011有另外 2 个不同的 id。另一件事是,每个变量只是一个特定对象(值)的标签。现在,当我们说时j=10,对象的 id10被分配给变量j。然后当您更改j(例如j=j+1)的值时,j将引用另一个对象。换句话说,j将成为另一个对象的标签。因此,j当其值改变时,的 id 也会变化。还有 Python 的缓存方法,这有助于提高效率。例如,当您编写j=10x=10创建 2 个单独的对象时,它只会创建一个10带有 2 个标签j和的对象x

解决方案 7:

这些是原始类型,所以我猜每个值都有自己的 ID。尝试创建一个真正的对象,我想你会看到你期望的功能。

如果您需要一个原始类型的 id,那么您可以创建一个仅包含该类型的一个成员的对象。

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

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用