我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.
现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.
>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
为什么以下在Python中出现意外行为?
>>> a = 256
>>> b = 256
>>> a is b
True # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False # What happened here? Why is this False?
>>> 257 is 257
True # Yet the literal numbers compare properly
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.5.2.尝试一些不同版本的Python,似乎Python 2.3.3显示了99到100之间的上述行为.
基于以上所述,我可以假设Python在内部实现,使得"小"整数以不同于大整数的方式存储,is运算符可以区分.为什么泄漏抽象?当我不知道它们是否是数字时,比较两个任意对象以查看它们是否相同的更好的方法是什么?
可能重复:
Python"is"运算符使用整数意外运行
昨晚做了什么奇怪的事情
if max_urls is 0:
max_urls = 10
Run Code Online (Sandbox Code Playgroud)
总是会返回false ...即使max_urls为0 ....它也是从数据库中分配的.当我做了一个
print type(max_urls)
Run Code Online (Sandbox Code Playgroud)
会回来的
<type 'long'> 0
Run Code Online (Sandbox Code Playgroud)
这似乎是正确的,但它总是会返回虚假.
如果我把它改成了
if max_urls == 0:
max_urls = 10
Run Code Online (Sandbox Code Playgroud)
那么当它为0时它最终会返回true.为什么==和之间的区别是?
你好.
我有一个问题,或许可能会启发我,而不是我要问的问题.
考虑一下:
>>> x = 'Hello'
>>> y = 'Hello'
>>> x == y
True
>>> x is y
True
Run Code Online (Sandbox Code Playgroud)
我一直使用比较运算符.我还读到了is比较内存地址,因此在这种情况下,返回True
所以我的问题是,这是比较Python中变量的另一种方法吗?如果是,那为什么不使用?
另外我注意到在C++中,如果变量具有相同的值,则它们的内存地址是不同的.
{ int x = 40; int y = 40; cout << &x, &y; }
0xbfe89638, 0xbfe89634
Run Code Online (Sandbox Code Playgroud)
Python具有相同内存地址的原因是什么?