Analysis on the difference between operators '==' and 'is' in Python

高洛峰
Release: 2017-03-16 16:21:53
Original
1032 people have browsed it

Preface

Before talking about the difference between the two operatorsis and ==, you must first know what the objectcontains in Python The three basic elements are: id (identity identification), python type() (data type) and value (value). Both is and == are used to compare and judge objects, but the content of comparing objects is different. Let’s take a look at the specific differences.

There are two methods in Python to compare whether two objects are equal. Simply put, their differences are as follows:

is compares two referencesWhether it points 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
Copy after login
Implementation principle

is compares whether the two are the same object, so what is compared is the memory address (whether the id is the same).

== is a value comparison. Immutable objects, such as int, str, will directly compare values. For objects known to Python, their eq

function will be called for comparison. (In fact, known objects should also be compared through the built-in eq function). For custom objects, if the eq function is implemented, it will be used for comparison. If it is not implemented, the effect is the same as ==.

对象缓存机制
Copy after login
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 small object. The address is assigned a new value. Example:

>>> c = 1
>>> d = 1
>>> print(c is d) 
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True
Copy after login
The calculated assignment 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 area by using the intern function.

The above is the detailed content of Analysis on the difference between operators '==' and 'is' in Python. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template