【问题标题】:When are objects loaded into memory in python?什么时候在python中将对象加载到内存中?
【发布时间】:2019-10-12 04:20:30
【问题描述】:

以python为例:

$ python
>>> id(True)
140736139690832
>>> id(1)
140317292515368
>>> ^D

$ python
>>> id(True)
140736139690832
>>> id(1)
140585619968040

True 在这两种情况下都具有相同的id,但数字1 却没有。为什么会这样?是不是在初始化python之前给某个内存地址分配了某些类型,或者为什么不同项目之间的内存地址有时相同有时不同?

来自文档:

CPython 实现细节:对于 CPython,id(x) 是存储 x 的内存地址。

【问题讨论】:

    标签: python


    【解决方案1】:

    CPython 为小数字创建可重用存储,但大概它在循环中执行此操作,并将它们存储到堆分配的常量数组中。另一方面,TrueFalse 更像是“静态全局变量”,它们在 Python 可执行映像中具有固定地址。

    所以这里没有什么真正令人惊讶的。您也不应该依赖这些细节——id 在实际的 Python 程序中很少使用。

    【讨论】:

    • 实际上,Trueid 在执行之间也会发生变化。 OP 两次得到相同的 id 纯属巧合。
    • @Aran-Fey:这可能取决于 ASLR,如果 ASLR 不在播放中,如果 OP 的 True 实际上加载到相同的地址,我不会感到惊讶。
    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 2016-08-22
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多