gpt4 book ai didi

在 Python shell 和 *.py 文件中运行时 Python 不同的内存管理行为

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:06 24 4
gpt4 key购买 nike

示例 1:

➜  /tmp  cat t.py 
a = 250000000000
b = 250000000000
print id(a), id(b), id(a) == id(b)
➜ /tmp python t.py
140450848587992 140450848587992 True #(Why is True?)

示例 2:

➜  /tmp  python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 250000000000
>>> b = 250000000000
>>> print id(a), id(b), id(a) == id(b)
140443481339400 140443481339208 False #(I think it should be False)

我知道 Python 有一个小整数缓存池(从 -5 到 256),所以两个大整数应该一直有不同的 id。

如何解释大整数在 Python shell 和 *.py 文件中运行时的不同行为?

最佳答案

如果我是读取 .py 文件的 Python 解释器(如您的第一个示例),我只会为这个数字分配一次内存,然后生成 ab指向这个位置。

例如,解释器读取此文件并看到两个变量被分配了相同的值并认为:“我想通过为相同的值分配两个部分来浪费内存吗?不,我不想。相反,我最好分配一个单独的 block 并将该值存储在其中”。因此,此值只有 一个 副本,这就是这些变量具有相同 ID 的原因。

在第二种情况下,Python 必须在您进行赋值时分配内存,因此有两 block 内存具有相同的数据。

综上所述,在第一种情况下,解释器对代码了解得更多(给出了整个代码),因此它可以优化它(并生成.pyo 文件),而在第二个文件中,它根本无法进行任何优化。

关于在 Python shell 和 *.py 文件中运行时 Python 不同的内存管理行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36620764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com