为什么内存分配在python中对于正整数与负整数表现不同?

时间:2019-07-19 15:15:42

标签: python-3.x

我在Windows 7 cmd中进行了以下测试:

Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 8
>>> b = 8
>>> id(a)
8791373558832
>>> id(b)
8791373558832
>>> a is b
True
>>> c = -8
>>> d = -8
>>> id(c)
4802576
>>> id(d)
5223952
>>> c is d
False
>>> type(a)
<class 'int'>
>>> type(c)
<class 'int'>
>>>

对象 a,b,c,d 都是int类型,我以前认为相同类型的对象在内存分配中应该以相同的方式处理。我已经搜索了Python标准库文档,但是找不到与此相关的任何内容。

有人可以帮忙解释吗?

1 个答案:

答案 0 :(得分:0)

idis仅对可变对象有意义。如果您有一个不变的对象,即一个值,那么您应该使用==而不是is(而且我不知道您使用id的目的是什么,但也许您应该看一下改为hash)。对于无法更改的对象,共享相同物理存储的值与不共享相同物理存储的值之间没有有意义的区别。运行时根据实现的关注点来选择何时共享物理存储以及何时不共享物理存储。