gpt4 book ai didi

python - Python如何知道已经存储在其内存中的值?

转载 作者:IT王子 更新时间:2023-10-28 23:33:09 25 4
gpt4 key购买 nike

我想知道 Python 是如何知道(如果它知道的话)一个值类型对象已经存储在它的内存中(并且还知道它在哪里)。

对于这段代码,当为b赋值1时,它怎么知道1的值已经在它的内存中,将其引用存储在 b?

>>> a = 1
>>> b = 1
>>> a is b
True

最佳答案

Python(准确地说是 CPython)使用共享的小整数来帮助快速访问。 [-5, 256] 的整数范围已经存在于内存中,所以如果你检查地址,它们是相同的。但是,对于较大的整数,情况并非如此。

a = 100000
b = 100000
a is b # False

等等,什么?如果你检查数字的地址,你会发现一些有趣的东西:

a = 1
b = 1
id(a) # 4463034512
id(b) # 4463034512

a = 257
b = 257
id(a) # 4642585200
id(b) # 4642585712

它被称为整数缓存。您可以阅读有关整数缓存的更多信息 here .

感谢@KlausD 和@user2357112 的评论提到,对小整数的直接访问将使用整数缓存,而如果您进行计算,虽然它们可能等于 [-5, 256] 范围内的数字,但它不是缓存的整数。例如

pow(3, 47159012670, 47159012671) is 1 # False
pow(3, 47159012670, 47159012671) == 1 # True

“The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.”

为什么?因为循环更频繁地使用小整数。使用对现有对象的引用而不是创建新对象可以节省开销。

关于python - Python如何知道已经存储在其内存中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55756029/

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