test = input('TT >>').strip()
print(type(test))
print(type('TT'))
print(id(test))
print(id('TT'))
if test is "TT":
print('Yes')
上面的代码运行后,结果为
TT >>TT
<class 'str'>
<class 'str'>
4364442848
4364036392
我在输入那里写了字符串'TT',按道理变量这里获取到的就是字符串'TT',python的字符串类型是不可变,为什么我这里得到的 id 却不相同?
另一端测试代码
tt2 = 'TT'
tt3 = 'TT'
print(id(tt2))
print(id(tt3))
得到结果:
4314464360
4314464360
这里的id 就相同,难道input函数得到的返回值和这样直接赋值字符串有所不同吗?
环境是MAC下运行python3
根据 python 官方文档, id() 函数解释如下
用 input() 函数返回的是动态创建的字符串,它的内存地址不是预知的。
而 tt2 = 'TT'; tt3 = 'TT'; 这种, python 解释器只会保存第一个 ‘TT’ 字符串,第二个 ‘TT’ 被引向前面那个。因此它们的 id() 结果相同。改变 tt2 或 tt3 将导致新的字符串产生,而不会改变 ‘TT’ 内容。