对Python的id()感到困惑

对Python的id()感到困惑,第1张

对Python的id()感到困惑

通常,一旦您使用整数或字符串或任何其他文字,Python就会在您的内存中创建一个新对象。保证

id
在对象的生存期内具有相同的值,即,其引用计数不为零。

当您编写类似的内容时:

>>> id(1000)140497411829680

Python创建整数1000并返回其

id
(CPython中对象的内存地址)。完成此 *** 作后,整数对象1000的引用计数为零,并将其删除。这样可以确保您不能仅通过写入
id(something)
(也不能将任何变量名绑定到对象)来保持填充内存。

通常,您无法预测何时会发生重用,但是在我的Python Shell中,它会相当一致地发生:

>>> id(1000)140697307078576>>> id(1001)140697307078576>>> id(1002)140697307078576>>> id(1003)140697307078576

您会看到在创建每个新整数时,一次又一次使用相同的内存地址。但是,如果您防止引用计数下降到零,则可以看到使用了新的内存:

>>> a = 1000>>> id(a)140697307078576>>> b = 1001>>> id(b)140697306008368

在CPython中,整数-5到255是特殊情况,因为它们 始终
存在(因此

id
在Python运行时始终保持相同)。这是为了避免重复创建和破坏常用整数而进行的优化。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5652868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存