Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为什么python中正整数和负整数的内存分配行为不同?_Python 3.x - Fatal编程技术网

Python 3.x 为什么python中正整数和负整数的内存分配行为不同?

Python 3.x 为什么python中正整数和负整数的内存分配行为不同?,python-3.x,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) 8791

我在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标准库文档,但没有找到与此相关的内容


有谁能帮忙解释一下吗?

id和is只对可变对象有真正意义。若你们有一个不可变的对象,一个值,那个么你们应该用==代替is,我不知道你们用id做什么,但也许你们应该看看散列。对于无法更改的对象,共享同一物理存储的值与不共享的值之间没有任何有意义的差异。运行时会根据实现问题选择何时共享物理存储以及何时不共享物理存储。

是否查看post?@MrFuppes谢谢。在提问之前没有找到那篇帖子。很抱歉,这是一条迟到的评论,我想我是在用id检查两个对象是否是同一个对象。有人告诉我,在cPython实现中,ID返回对象的内存地址,正如我更熟悉C++,使用内存地址检查似乎是正确的和有意义的。谢谢你的解释,也许我需要改变我的视角来观察Python。