该
is运营商不匹配变量的值,但这些实例本身.
它到底意味着什么?
我声明了两个变量命名x并y在两个变量中分配相同的值,但是当我使用is运算符时它返回false .
我需要澄清一下.这是我的代码.
x = [1, 2, 3]
y = [1, 2, 3]
print x is y #It prints false!
Run Code Online (Sandbox Code Playgroud) 运算符是比较两个对象的内存地址(如果它们相同),则返回true,否则返回false. 代码#1
>>> a = "poi"
>>> b = "poi"
>>> a is b
True
Run Code Online (Sandbox Code Playgroud)
我创建了两个对象,其内容相同,但它们完全位于不同的内存地址上.那么为什么运算符返回true?不应该返回虚假.就像这段代码一样
>>> ktr = "today is a fine day"
>>> ptr = "today is a fine day"
>>> ktr is ptr
False
Run Code Online (Sandbox Code Playgroud) 我想先说一下,我知道两者之间的区别==,is一个用于引用,另一个用于对象。我也知道 python(-5, 256)在启动时缓存范围内的整数,因此在将它们与is.
但是,我看到了一种奇怪的行为。
>>> 2**7 is 2**7
True
>>> 2**10 is 2**10
False
Run Code Online (Sandbox Code Playgroud)
这是可以预料的,2**7is128和2**10is 1024,一个在区间内(-5, 256),另一个不在。
然而...
>>> 10000000000000000000000000000000000000000 is 10000000000000000000000000000000000000000
True
Run Code Online (Sandbox Code Playgroud)
为什么会这样返回True?它显然是一个高于任何类型的缓存间隔的值,并且2**10 is 2**10清楚地表明is它实际上不适用于上面的整数256。那么……为什么会这样?
x=300
y=300
print(id(x),id(y))
a=[300,300]
print(id(a[0]),id(a[1]))
Run Code Online (Sandbox Code Playgroud)
在上面的代码执行我得到不同的地址x和y,但相同的地址a[0]和a[1].谁能告诉我为什么会这样?