Hướng dẫn is is the same as == in python? - có giống với == trong python không?

Có sự khác biệt giữa == và is trong Python không?

Vâng, họ có một sự khác biệt rất quan trọng.

==: Kiểm tra sự bình đẳng - ngữ nghĩa là các đối tượng tương đương (không nhất thiết là cùng một đối tượng) sẽ kiểm tra như nhau. Như tài liệu nói:: check for equality - the semantics are that equivalent objects (that aren't necessarily the same object) will test as equal. As the documentation says:

Các toán tử, ==,> =,

is: Kiểm tra danh tính - ngữ nghĩa là đối tượng (như được giữ trong bộ nhớ) là đối tượng. Một lần nữa, tài liệu cho biết:: check for identity - the semantics are that the object (as held in memory) is the object. Again, the documentation says:

Các toán tử is

id(a) == id(b)
0 cho nhận dạng đối tượng:
id(a) == id(b)
1 là đúng khi và chỉ khi
id(a) == id(b)
2 và
id(a) == id(b)
3 là cùng một đối tượng. Nhận dạng đối tượng được xác định bằng hàm
id(a) == id(b)
4.
id(a) == id(b)
5 mang lại giá trị sự thật nghịch đảo.

Do đó, việc kiểm tra danh tính giống như kiểm tra sự bình đẳng của ID của các đối tượng. Đó là,

a is b

giống như:

id(a) == id(b)

trong đó

id(a) == id(b)
6 là hàm tích hợp trả về một số nguyên "được đảm bảo là duy nhất trong số các đối tượng hiện có đồng thời" (xem
id(a) == id(b)
7) và trong đó
id(a) == id(b)
8 và
id(a) == id(b)
9 là bất kỳ đối tượng tùy ý nào.

Các hướng sử dụng khác

Bạn nên sử dụng những so sánh này cho ngữ nghĩa của họ. Sử dụng is để kiểm tra danh tính và == để kiểm tra bình đẳng.

Vì vậy, nói chung, chúng tôi sử dụng is để kiểm tra danh tính. Điều này thường hữu ích khi chúng ta đang kiểm tra một đối tượng chỉ tồn tại một lần trong bộ nhớ, được gọi là "singleton" trong tài liệu.

Các trường hợp sử dụng cho is bao gồm:

  • >>> class Object(object): pass
    >>> obj = Object()
    >>> obj2 = Object()
    >>> obj == obj, obj is obj
    (True, True)
    >>> obj == obj2, obj is obj2
    (False, False)
    
    4
  • Các giá trị enum (khi sử dụng enum từ mô -đun enum)
  • thường là các mô -đun
  • Thông thường các đối tượng lớp kết quả từ các định nghĩa của lớp
  • Thông thường các đối tượng chức năng do các định nghĩa chức năng
  • Bất cứ điều gì khác chỉ nên tồn tại một lần trong bộ nhớ (tất cả các đơn, nói chung)
  • một đối tượng cụ thể mà bạn muốn theo danh tính

Các trường hợp sử dụng thông thường cho == bao gồm:

  • Số, bao gồm cả số nguyên
  • dây
  • danh sách
  • bộ
  • Từ điển
  • các đối tượng có thể thay đổi tùy chỉnh
  • Các đối tượng bất biến tích hợp khác, trong hầu hết các trường hợp

Trường hợp sử dụng chung, một lần nữa, đối với ==, là đối tượng bạn muốn có thể không phải là cùng một đối tượng, thay vào đó nó có thể là một đối tượng tương đương

Pep 8 hướng

PEP 8, Hướng dẫn kiểu Python chính thức cho thư viện tiêu chuẩn cũng đề cập đến hai trường hợp sử dụng cho is:

So sánh với các đơn lẻ như

>>> class Object(object): pass
>>> obj = Object()
>>> obj2 = Object()
>>> obj == obj, obj is obj
(True, True)
>>> obj == obj2, obj is obj2
(False, False)
4 phải luôn luôn được thực hiện với is hoặc
id(a) == id(b)
0, không bao giờ là người vận hành bình đẳng.

Ngoài ra, hãy cẩn thận khi viết

>>> nan = float('nan')
>>> nan
nan
>>> nan is nan
True
>>> nan == nan           # !!!!!
False
1 khi bạn thực sự có nghĩa là
>>> nan = float('nan')
>>> nan
nan
>>> nan is nan
True
>>> nan == nan           # !!!!!
False
2 - ví dụ: Khi kiểm tra xem một biến hoặc đối số mặc định là
>>> class Object(object): pass
>>> obj = Object()
>>> obj2 = Object()
>>> obj == obj, obj is obj
(True, True)
>>> obj == obj2, obj is obj2
(False, False)
4 đã được đặt thành một số giá trị khác. Giá trị khác có thể có một loại (chẳng hạn như một thùng chứa) có thể sai trong bối cảnh boolean!

Suy luận bình đẳng từ bản sắc

Nếu is là đúng, sự bình đẳng thường có thể được suy ra - về mặt logic, nếu một đối tượng là chính nó, thì nó sẽ kiểm tra tương đương với chính nó.

Trong hầu hết các trường hợp logic này là đúng, nhưng nó dựa vào việc thực hiện phương pháp đặc biệt

>>> nan = float('nan')
>>> nan
nan
>>> nan is nan
True
>>> nan == nan           # !!!!!
False
5. Như các tài liệu nói,

Hành vi mặc định để so sánh bình đẳng (==

>>> nan = float('nan')
>>> nan
nan
>>> nan is nan
True
>>> nan == nan           # !!!!!
False
7) dựa trên danh tính của các đối tượng. Do đó, so sánh bình đẳng của các trường hợp có cùng nhận dạng dẫn đến sự bình đẳng và so sánh bình đẳng của các trường hợp với các danh tính khác nhau dẫn đến bất bình đẳng. Một động lực cho hành vi mặc định này là mong muốn rằng tất cả các đối tượng phải là phản xạ (nghĩa là x là y ngụ ý x == y).

và vì lợi ích của sự nhất quán, khuyến nghị:

So sánh bình đẳng nên là phản xạ. Nói cách khác, các đối tượng giống hệt nhau nên so sánh bằng nhau:

id(a) == id(b)
1 ngụ ý
>>> nan = float('nan')
>>> nan
nan
>>> nan is nan
True
>>> nan == nan           # !!!!!
False
9

Chúng ta có thể thấy rằng đây là hành vi mặc định cho các đối tượng tùy chỉnh:

>>> class Object(object): pass
>>> obj = Object()
>>> obj2 = Object()
>>> obj == obj, obj is obj
(True, True)
>>> obj == obj2, obj is obj2
(False, False)

Các đối nghịch cũng thường đúng - nếu một cái gì đó kiểm tra không bằng nhau, bạn thường có thể suy luận rằng chúng không phải là cùng một đối tượng.

Vì các bài kiểm tra cho sự bình đẳng có thể được tùy chỉnh, suy luận này không phải lúc nào cũng đúng với tất cả các loại.

Một ngoại lệ

Một ngoại lệ đáng chú ý là

>>> [nan] == [nan]
True
>>> (nan,) == (nan,)
True
0 - nó luôn kiểm tra không bằng chính nó:

>>> nan = float('nan')
>>> nan
nan
>>> nan is nan
True
>>> nan == nan           # !!!!!
False

Kiểm tra danh tính có thể kiểm tra nhanh hơn nhiều so với kiểm tra bình đẳng (có thể yêu cầu kiểm tra đệ quy thành viên).

Nhưng nó không thể được thay thế cho sự bình đẳng nơi bạn có thể tìm thấy nhiều hơn một đối tượng tương đương.

Lưu ý rằng việc so sánh sự bình đẳng của danh sách và bộ dữ liệu sẽ cho rằng danh tính của các đối tượng là bằng nhau (vì đây là một kiểm tra nhanh). Điều này có thể tạo ra mâu thuẫn nếu logic không nhất quán - như đối với

>>> [nan] == [nan]
True
>>> (nan,) == (nan,)
True
0:

>>> [nan] == [nan]
True
>>> (nan,) == (nan,)
True

Một câu chuyện cảnh báo:

Câu hỏi là cố gắng sử dụng is để so sánh các số nguyên. Bạn không nên cho rằng một thể hiện của một số nguyên là cùng một thể hiện với một phiên bản có được bởi một tài liệu tham khảo khác. Câu chuyện này giải thích tại sao.

Một nhà bình luận có mã dựa vào thực tế là các số nguyên nhỏ (bao gồm -5 đến 256) là những người độc thân trong Python, thay vì kiểm tra sự bình đẳng.

Wow, điều này có thể dẫn đến một số lỗi ngấm ngầm. Tôi đã có một số mã kiểm tra nếu A là B, hoạt động như tôi muốn vì A và B thường là số lượng nhỏ. Lỗi chỉ xảy ra hôm nay, sau sáu tháng được sản xuất, bởi vì A và B cuối cùng đã đủ lớn để không được lưu trữ. - GWG

Nó làm việc trong phát triển. Nó có thể đã vượt qua một số người vô danh.

Và nó hoạt động trong sản xuất - cho đến khi mã kiểm tra một số nguyên lớn hơn 256, tại thời điểm đó nó thất bại trong sản xuất.

Đây là một thất bại sản xuất có thể đã bị bắt trong đánh giá mã hoặc có thể với một người kiểm tra phong cách.

Hãy để tôi nhấn mạnh: Không sử dụng is để so sánh các số nguyên.

Sự khác biệt giữa == và là là gì?

== dành cho bình đẳng giá trị. Nó được sử dụng để biết liệu hai đối tượng có cùng giá trị hay không.Nó được sử dụng để biết nếu hai tài liệu tham khảo giới thiệu (hoặc điểm) đến cùng một đối tượng, tức là nếu chúng giống hệt nhau. It's used to know if two objects have the same value. is is for reference equality. It's used to know if two references refer (or point) to the same object, i.e if they're identical.

== và === trong Python là gì?

Toán tử == Kiểm tra xem hai toán hạng có bằng giá trị hay không. Toán tử === Kiểm tra xem xem hai toán hạng có bằng với kiểu dữ liệu và giá trị không. The === operator checks to see if two operands are equal by datatype and value.

Điều ngược lại với == trong Python là gì?

Trong Python! = Được định nghĩa là không bằng toán tử.Nó trả về đúng nếu các toán hạng ở hai bên không bằng nhau và trả về sai nếu chúng bằng nhau.not equal to operator. It returns True if operands on either side are not equal to each other, and returns False if they are equal.

Điều gì là == trong Python được gọi là?

Trong Python và nhiều ngôn ngữ lập trình khác, một nhãn hiệu bằng nhau được sử dụng để gán giá trị cho một biến, trong khi hai điểm bằng nhau liên tiếp được sử dụng để kiểm tra xem 2 biểu thức có cùng giá trị hay không.(x == y) là sai vì chúng tôi đã gán các giá trị khác nhau cho x và y.a single equal mark is used to assign a value to a variable, whereas two consecutive equal marks is used to check whether 2 expressions give the same value . (x==y) is False because we assigned different values to x and y.