在python中,判断两个变量是否相等,可以用==或者is来判断;判断它们是否不同,可以用is not。
示例
使用注意事项
1、有时候两个字符串打印出来看起来一样,但是判断是False?如果两个字符串的末尾还有其他符号,比如回车'\n',打印的时候找不到,所以需要strip:
a=a.strip()
b=b.strip()
if a==b:
print "True"
2.有时候==判断是 True ,is 判断却是 False?
这是因为这两个字符串来自不同的内存块,具有不同的内存地址
id() 函数用于获取对象的内存地址。
(ob1 is ob2) 等价于 (id(ob1) == id(ob2)) id函数可以获取对象的内存地址。如果两个对象的内存地址相同,那么这两个对象一定是一个对象。相当于是。
3.还有一种情况,两个对象通过is判断为False,但通过id判断为true。原理比较复杂,如下:
In [1]: def bar(self, x):
...: return self.x + y
...:
In [2]: class Foo(object):
...: x = 9
...: def __init__(self ,x):
...: self.x = x
...: bar = bar
...:
In [3]: foo = Foo(5)
In [4]: foo.bar is Foo.bar
Out[4]: False
In [5]: id(foo.bar) == id(Foo.bar)
Out[5]: True
真实情况是,当 .操作符执行后,实际生成了一个代理对象。当 foo.bar 为 Foo.bar 时,依次生成这两个对象,并在堆栈上进行比较。因为地址不同,所以一定是False,但是当id(foo.bar) == id(Foo.bar)的时候就不一样了,先生成foo.bar,再计算foo.bar的地址,计算完地址在 foo.bar 中,没有指向 foo.bar 的对象,所以 foo.bar 对象将被释放。然后生成 Foo.bar 对象。由于 foo.bar 和 Foo.bar 占用的内存大小相同,所以重用了原来 foo.bar 的内存地址,所以 id(foo.bar) == id(Foo.bar) 为 True。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python copy模块中的函数使用10/05
- ♥ Python字符串操作常用知识点(二)12/25
- ♥ python3安装失败如何处理12/11
- ♥ Python初学者的urlopen()详解10/06
- ♥ 什么是 python pytesseract 库10/20
- ♥ 如何本地化python08/31
内容反馈