【问题标题】:is comparison returns False with strings using same idis 比较返回 False 与使用相同 id 的字符串
【发布时间】:2017-02-09 22:42:29
【问题描述】:

我在玩 Python is== 运算符。据我所知,is 运算符检查两个对象是否具有相同的 id,但在我的情况下,即使两个子字符串具有相同的 id,运算符也会返回 False。

代码如下:

#! /usr/bin/python3
# coding=utf-8
string = "HelloWorld"

print(id(string))    #140131089280176
print(id(string[0:5]))  #140131089251048
print(id(string[-10:-5]))   #140131089251048


print(string[0:5] == string[-10:-5])    #True
print(string[0:5] is string[-10:-5])    #False

子字符串和原来的字符串没有预期的相同的id,但是为什么操作符返回false,有2个具有相同id的子字符串?

【问题讨论】:

  • 我猜 Python 在第一个示例中重用了内存中的同一个插槽,当你一次创建两个切片时它不能这样做(或者如果你分配了它们,所以它们不是立即取消引用)。

标签: python string comparison


【解决方案1】:

对我来说都是:

print(id(string[0:5]))
print(id(string[-10:-5]))  

有不同的 ID,因此,这些答案:

print(string[0:5] == string[-10:-5])    #True
print(string[0:5] is string[-10:-5])    #False

正如他们所期望的那样。

你确定你没有在这里犯错吗?

# 我会把它作为评论发布,但还不能

【讨论】:

  • 我又试了一次,他们都有相同的 id。 substrings(string[0:5] 和 string[-10:-5]) 都应该指向同一个字符串字面量,在这种情况下是“Hello”。
猜你喜欢
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 2011-11-14
  • 2016-04-17
  • 2019-10-06
  • 1970-01-01
相关资源
最近更新 更多