Python 为什么input()会返回不同的对象id,而不管输入的是什么?

Python 为什么input()会返回不同的对象id,而不管输入的是什么?,python,python-3.x,Python,Python 3.x,为什么输入不返回字符串的常量id >>> id(input()) String 2339026478168 >>> id(input()) String 2339026478224 这与创建两个相同值的字符串相比: >>> id('String') 2339026468680 >>> id('String') 2339026468680 这直接影响到运营商 返回对象的“标识”。这是一个整数,它是 保证此对象在运行期间唯一

为什么输入不返回字符串的常量id

>>> id(input())
String
2339026478168
>>> id(input())
String
2339026478224
这与创建两个相同值的字符串相比:

>>> id('String')
2339026468680
>>> id('String')
2339026468680
这直接影响到运营商

返回对象的“标识”。这是一个整数,它是 保证此对象在运行期间唯一且恒定 一生两个生命周期不重叠的对象可能具有相同的属性 id值

CPython实现细节:这是中对象的地址 记忆

资料来源:

有些情况下,某些值具有相同的id,因为它们是作为单例实现的。这些通常是典型程序中经常出现的统计值。一些明显的例子是无、对和错

>>> variable = True
>>> variable is True
True
一些不明显的例子是相对较小的数字

>>> variable = 256
>>> variable is 256
True
>>> variable = 257
>>> variable is 257
False

这也是为什么人们建议在is上使用==运算符进行值比较。

不要使用“is”,你甚至不能保证两个相同的字符串文本具有相同的id。为什么要使用==?所有叫Michael的人都是同一个人吗?@Julien我的问题不是为什么应该,而是为什么应该?我的问题更多的是关于为什么input每次都不以相同的方式构造id。@Apc0243 input不构造id。如果你仔细阅读答案,你就会知道。我对所有Python都不是很了解但我还是要冒险去猜。这可能是因为文字变量赋值,即var='string',给出了相同的id,而输入没有,因为前者是常量/文字字符串,输入可以是任何内容。这只是猜测,所以请谨慎对待salt@pkqxdd我的问题不是关于如何执行id,而是为什么一个值相等的字符串与同一个id关联,而输入中的同一个字符串不关联。我的最佳猜测是,在创建字符串值时,每次都会建立并检查内存地址,而输入无法引用该地址?所以每次输入生成一个新对象时,不管它的值是什么,而通过更传统的pythonic方法创建的相同值的字符串没有这个问题?我很抱歉,如果这是显而易见的,我只是不太明白