2016-10-01 64 views
3

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

下面是代码:

#! /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,但为什么是运营商返回与2子假用相同的ID?

+4

我猜Python是重复使用相同的插槽在内存上的第一个例子,其中当一次创建两个切片它不能做(或者如果你分配它们,那么它们不会立即被解除引用)。 – jonrsharpe

回答

0

对我来说都:

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 

,因为它们应该可以预期的。

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

#我会后,作为一个评论,但不能又

+0

我再次尝试,他们都有相同的ID。在这种情况下,子字符串(字符串[0:5]和字符串[-10:-5])应指向相同的字符串文字“Hello”。 – opwid