在网上搜了一下,很多人发帖问python的is==这两个比较操作符的区别,关于这个,官方文档有一些说明。

The operators is and is not test for object identity: x is y is true if and only if x and y are the same object. x is not y yields the inverse truth value.

上面说明了is操作符用来判断两个操作数是不是同一个对象,也就是它们引用的是不是同一个对象。
不过在下面注释那里又指出,

Due to automatic garbage-collection, free lists, and the dynamic nature of descriptors, you may notice seemingly unusual behaviour in certain uses of the is operator, like those involving comparisons between instance methods, or constants. Check their documentation for more info.

因为自动GC,涉及到实例方法或者常量的比较的时候,你可能会看到一些不同寻常的现象。
这里的常量应该是说这种情况

>>> x=1
>>> y=1
>>> x is y
True
>>> id(x)
140504559802792
>>> id(y)
140504559802792

这里之所以,x is yTrue可能是为了减少内存分配,采用了类似了C的做法,把常量数据放在一个固定的区域,然后如果后面有使用相应的常量,则直接引用。
至于实例方法,等找个例子才写。


yoop
10 声望2 粉丝

我要/一步一步往上爬