Preface
Before talking about the difference between the two operators is and ==, you must first know the three basic elements contained in objects in Python, namely: id (identity), python type() (data type) and value (value). Both is and == are used to compare and judge objects, but the contents of object comparison and judgment are different. Let’s take a look at the specific differences.
There are two methods to compare whether two objects are equal in Python. Simply put, their differences are as follows:
is is to compare whether two references point to the same object (reference comparison).
== is to compare whether two objects are equal.
>>> a = [1, 2, 3] >>> b = a >>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象 True >>> b == a # 当然,他们的值也是相等的 True >>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象, >>> b is a # 所以指向的不是同一个对象了 False >>> b == a # 但他们的值还是相等的 True
Object caching mechanism
Python will cache relatively small objects. The next time a relatively small object is used, it will search in the cache area. If it is found, it will not open up new memory, but will continue to cache the address of the small object. Assign new value. Example:
>>> c = 1 >>> d = 1 >>> print(c is d) True >>> 1000 is 10**3 False >>> 1000 == 10**3 True
The assignment is calculated and does not use the buffer area. This can be seen from the first code example.
For strings, you can force the use of the buffer by using the intern function.