是比较返回False与使用相同的ID的字符串
问题描述:
我正在玩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?
答
对我来说都:
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
我猜Python是重复使用相同的插槽在内存上的第一个例子,其中当一次创建两个切片它不能做(或者如果你分配它们,那么它们不会立即被解除引用)。 – jonrsharpe