Python中is 和== 的区别

is比较的是id,==比较的是value

python为了实现对内存的有效利用,对小整数[-5,256]内的整数会进行缓存,不在该范围内的则不会缓存。

每个对象包含3个属性,id,type,value

• id就是对象地址,可以通过内置函数id()查看对象引用的地址。

• type就是对象类型,可以通过内置函数type()查看对象的类型。

• value就是对象的值。

比较操作

1. 任何两个对象都可以比较。

2. 相同类型的对象(实例),如果是数字型(int/float/long/complex),则按照简单的大小来比较;如果是非数字型,且类(型)中定义了__cmp__(含__gt__,__lt__等)则按照__cmp__来比较,否则按照地址(id)来比较

3. 不同类型的对象(实例),如果其中一个比较对象是数字型(int/float/long/complex等),则数字型的对象<其它非数字型的对象;如果两个都是非数字型的对象,则按照类型名的顺序比较,如{} < "abc"(按照"dict" < "str"),而"abc" > [1,2], "abc" < (1,2)。

4. 对于自定义的类(型)实例,如果继承自基本类型,则按照基本类型的规则比较(1-3)。否则,old-style class < new-style class, new-style class之间按照类型名顺序比较,old-style class之间按照地址进行比较

5. bool类型是int的子类,且True=1, False=0,比较时按照1-4来比较,如True > -1, True < 4.2, True < "abc"等

上面的回答是针对Python2.x,3.x的有较大的变化,如str和int比较时会抛出异常等。
TypeError: '<' not supported between instances of 'int' and 'str'

回到题目,字符和数字的比较符合规则3,所以数字<字符。举个例子,如100和'a'(ord('a')=97),有
100<'a'

字符串与任何类型比较在python3中都不允许

print(100<'a')
print({}<'abc')
print("abc" > [1,2])

TypeError: '>' not supported between instances of 'str' and 'list'

example code :

x = 1
y = 1.0
z = int(y)

print(id(x))    # 1912008173872
print(id(y))    # 1912008824368
print(id(z))    # 1912008173872
x = 257
y = 257.0
z = int(y)

print(id(x))    # 2022368573552
print(id(y))    # 2022367385136
print(id(z))    # 2022368574576
class AA:
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return self is other


class BB:
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return str(self) == str(other)


a = AA("BYD真牛逼啊")
b = BB("BYD真牛逼啊")
print(a == b)
print(b == a)
print(str(a))
print(str(b))

输出:
# False
# False
# <__main__.AA object at 0x000002214A7B6FD0>
# <__main__.BB object at 0x000002214A7B6A60>
区别   Python   is
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章