Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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在控制台中为同一个整数创建不同的对象?_Python - Fatal编程技术网

为什么Python在控制台中为同一个整数创建不同的对象?

为什么Python在控制台中为同一个整数创建不同的对象?,python,Python,在上面的脚本中,两个ID是相同的a和b指的是同一个对象。在Python控制台中逐个运行命令时,ID不同: a = 1234 b = 1234 print(id(a), id(b)) 但是: 为什么1234在连续的命令中是不同的对象,而不是在一个命令或脚本中 我在CPython 3.5.2上进行了测试。我认为这与缓存无关。如果你打印(id(1234),id(1234))Python可以在打印后丢弃第一个值,并将空间重新用于第二个值。这不是简单的复制,但本质上是关于如何以及何时构建co_const

在上面的脚本中,两个ID是相同的
a
b
指的是同一个对象。在Python控制台中逐个运行命令时,ID不同:

a = 1234
b = 1234
print(id(a), id(b))
但是:

为什么
1234
在连续的命令中是不同的对象,而不是在一个命令或脚本中


我在CPython 3.5.2上进行了测试。

我认为这与缓存无关。如果你打印(id(1234),id(1234))Python可以在打印后丢弃第一个值,并将空间重新用于第二个值。这不是简单的复制,但本质上是关于如何以及何时构建
co_const
。在REPL中,它是每行的,在脚本模式下,它是每脚本文件一次。底线是,不要使用整数的标识,你在CPython实现细节的浑水中,两个相关的问题,实际上,@Chris_Rands链接的第一个问题是更准确的副本。因为它已经关闭,我不会再次打开来关闭它。我认为,当非python金徽章所有者使用不同的副本关闭时是可能的,但不是单手关闭。让我们用Chris的好评论和链接来结束它。我想现在每个人都明白了:)
>>> a = 1234
>>> b = 1234
>>> print(id(a), id(b))
2445680 6579168
>>> print(id(1234), id(1234))
6579472 6579472