Hàm so sánh trong Python là gì?

Có một sự khác biệt tinh tế giữa toán tử nhận dạng Python [

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7] và toán tử đẳng thức [
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8]. Mã của bạn có thể chạy tốt khi bạn sử dụng toán tử Python
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 để so sánh các số, cho đến khi nó đột nhiên không hoạt động. Bạn có thể đã nghe ở đâu đó rằng toán tử
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 của Python nhanh hơn toán tử
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 hoặc bạn có thể cảm thấy rằng nó trông giống Pythonic hơn. Tuy nhiên, điều quan trọng cần lưu ý là các toán tử này không hoạt động giống nhau

Toán tử

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 so sánh giá trị hoặc đẳng thức của hai đối tượng, trong khi toán tử
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 của Python kiểm tra xem hai biến có trỏ đến cùng một đối tượng trong bộ nhớ hay không. Trong phần lớn các trường hợp, điều này có nghĩa là bạn nên sử dụng các toán tử đẳng thức
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
6, trừ khi bạn đang so sánh với
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
7

Trong hướng dẫn này, bạn sẽ học

  • Sự khác biệt giữa bình đẳng đối tượng và danh tính là gì
  • Khi nào sử dụng toán tử bình đẳng và danh tính để so sánh các đối tượng
  • Những toán tử Python này làm gì dưới mui xe
  • Tại sao sử dụng
    >>> a = 256
    >>> b = 256
    >>> a is b
    True
    >>> id[a]
    1638894624
    >>> id[b]
    1638894624
    
    >>> a = 257
    >>> b = 257
    >>> a is b
    False
    
    >>> id[a]
    2570926051952
    >>> id[b]
    2570926051984
    
    7 và
    >>> from sys import intern
    >>> a = 'hello world'
    >>> b = 'hello world'
    >>> a is b
    False
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648426160
    
    >>> a = intern[a]
    >>> b = intern[b]
    >>> a is b
    True
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648396784
    
    9 để so sánh các giá trị dẫn đến hành vi không mong muốn
  • Cách viết một phương thức lớp
    >>> a = 256
    >>> b = 256
    >>> a is b
    True
    >>> id[a]
    1638894624
    >>> id[b]
    1638894624
    
    >>> a = 257
    >>> b = 257
    >>> a is b
    False
    
    >>> id[a]
    2570926051952
    >>> id[b]
    2570926051984
    
    0 tùy chỉnh để xác định hành vi của toán tử bình đẳng

Trạm dừng Python. Hướng dẫn này là một cách nhanh chóng và thiết thực để tìm thông tin bạn cần, vì vậy bạn sẽ nhanh chóng quay lại dự án của mình

Tiền thưởng miễn phí. Nhấp vào đây để nhận Bảng cheat Python và tìm hiểu kiến ​​thức cơ bản về Python 3, như làm việc với các kiểu dữ liệu, từ điển, danh sách và hàm Python

So Sánh Danh Tính Với Toán Tử Là và Không Là Toán Tử

Các toán tử Python

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
9 so sánh danh tính của hai đối tượng. Trong CPython, đây là địa chỉ bộ nhớ của họ. Mọi thứ trong Python là một đối tượng và mỗi đối tượng được lưu trữ tại một vị trí bộ nhớ cụ thể. Các toán tử Python
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
9 kiểm tra xem hai biến có tham chiếu đến cùng một đối tượng trong bộ nhớ hay không

Ghi chú. Hãy nhớ rằng các đối tượng có cùng giá trị thường được lưu trữ tại các địa chỉ bộ nhớ riêng biệt

Bạn có thể sử dụng

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
5 để kiểm tra danh tính của một đối tượng

>>>

>>> help[id]
Help on built-in function id in module builtins:

id[obj, /]
    Return the identity of an object.

    This is guaranteed to be unique among simultaneously existing objects.
    [CPython uses the object's memory address.]

>>> id[id]
2570892442576

Dòng cuối cùng hiển thị địa chỉ bộ nhớ nơi chính chức năng tích hợp sẵn

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
6 được lưu trữ

Có một số trường hợp phổ biến khi các đối tượng có cùng giá trị sẽ có cùng id theo mặc định. Ví dụ: các số -5 đến 256 được thực tập trong CPython. Mỗi số được lưu trữ tại một vị trí duy nhất và cố định trong bộ nhớ, giúp tiết kiệm bộ nhớ cho các số nguyên thường được sử dụng

Bạn có thể sử dụng

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 cho chuỗi để thực hiện. Chức năng này cho phép bạn so sánh địa chỉ bộ nhớ của chúng thay vì so sánh từng chuỗi ký tự

>>>

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784

Các biến

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
9 ban đầu trỏ đến hai đối tượng khác nhau trong bộ nhớ, như được hiển thị bằng các ID khác nhau của chúng. Khi bạn thực tập chúng, bạn đảm bảo rằng
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
9 trỏ đến cùng một đối tượng trong bộ nhớ. Bất kỳ chuỗi mới nào có giá trị
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
52 bây giờ sẽ được tạo tại một vị trí bộ nhớ mới, nhưng khi bạn thực tập chuỗi mới này, bạn phải đảm bảo rằng nó trỏ đến cùng một địa chỉ bộ nhớ như
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
52 đầu tiên mà bạn đã thực tập

Ghi chú. Mặc dù địa chỉ bộ nhớ của một đối tượng là duy nhất tại bất kỳ thời điểm nào, nhưng nó khác nhau giữa các lần chạy của cùng một mã và phụ thuộc vào phiên bản CPython và máy mà nó chạy

Các đối tượng khác được thực tập theo mặc định là

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
7,
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
55,
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
56 và. Hãy nhớ rằng hầu hết thời gian, các đối tượng khác nhau có cùng giá trị sẽ được lưu trữ tại các địa chỉ bộ nhớ riêng biệt. Điều này có nghĩa là bạn không nên sử dụng toán tử Python
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 để so sánh các giá trị

Loại bỏ các quảng cáo

Khi chỉ một số số nguyên được thực tập

Đằng sau hậu trường, Python thực tập các đối tượng với các giá trị thường được sử dụng [ví dụ: các số nguyên -5 đến 256] để. Đoạn mã sau đây cho bạn biết cách chỉ một số số nguyên có địa chỉ bộ nhớ cố định

>>>

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984

Ban đầu,

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
9 trỏ đến cùng một đối tượng được lưu trữ trong bộ nhớ, nhưng khi giá trị của chúng nằm ngoài phạm vi của các số nguyên phổ biến [từ -5 đến 256], chúng được lưu trữ tại các địa chỉ bộ nhớ riêng biệt

Khi nhiều biến trỏ đến cùng một đối tượng

Khi bạn sử dụng toán tử gán [

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
30] để biến một biến này bằng biến kia, bạn làm cho các biến này trỏ đến cùng một đối tượng trong bộ nhớ. Điều này có thể dẫn đến hành vi không mong muốn đối với các đối tượng có thể thay đổi

>>>

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
5

Điều gì vừa xảy ra? . Chà, ở dòng mà

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
33, bạn đặt
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
9 trỏ đến cùng một địa chỉ bộ nhớ như
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8, để cả hai biến bây giờ đều trỏ đến cùng một đối tượng

Nếu bạn xác định các danh sách này độc lập với nhau thì chúng sẽ được lưu trữ ở các địa chỉ bộ nhớ khác nhau và hoạt động độc lập

>>>

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
3

Vì giờ đây

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
9 đề cập đến các đối tượng khác nhau trong bộ nhớ nên việc thay đổi đối tượng này không ảnh hưởng đến đối tượng kia

So sánh đẳng thức với Python == và. = Toán tử

Nhớ lại rằng các đối tượng có cùng giá trị thường được lưu trữ tại các địa chỉ bộ nhớ riêng biệt. Sử dụng toán tử đẳng thức

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
6 nếu bạn muốn kiểm tra xem hai đối tượng có cùng giá trị hay không, bất kể chúng được lưu trữ ở đâu trong bộ nhớ. Trong phần lớn các trường hợp, đây là những gì bạn muốn làm

Khi sao chép đối tượng bằng nhưng không giống nhau

Trong ví dụ bên dưới, bạn đặt

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
9 là bản sao của
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 [là đối tượng có thể thay đổi, chẳng hạn như danh sách hoặc từ điển]. Cả hai biến sẽ có cùng một giá trị, nhưng mỗi biến sẽ được lưu trữ ở một địa chỉ bộ nhớ khác nhau

>>>

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
6

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
9 hiện được lưu trữ tại các địa chỉ bộ nhớ khác nhau, do đó,
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
64 sẽ không còn trả về
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
55. Tuy nhiên,
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
66 trả về
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
55 vì cả hai đối tượng đều có cùng giá trị

So sánh bằng cách bình đẳng hoạt động như thế nào

Điều kỳ diệu của toán tử đẳng thức

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 xảy ra trong phương thức lớp
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
0 của đối tượng bên trái dấu
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8

Ghi chú. Đây là trường hợp trừ khi đối tượng bên phải là lớp con của đối tượng bên trái. Để biết thêm thông tin, hãy kiểm tra chính thức

Đây là một phương thức lớp ma thuật được gọi bất cứ khi nào một thể hiện của lớp này được so sánh với một đối tượng khác. Nếu phương pháp này không được triển khai, thì theo mặc định,

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 sẽ so sánh địa chỉ bộ nhớ của hai đối tượng

Như một bài tập, hãy tạo một lớp

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
42 kế thừa từ
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
43 và triển khai
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
0 để so sánh xem độ dài của chuỗi này có giống với độ dài của đối tượng kia không

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
4

Bây giờ, một SillyString

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
52 phải bằng với chuỗi
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
46 và thậm chí với bất kỳ đối tượng nào khác có cùng độ dài

>>>

>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
0

Tất nhiên, đây là hành vi ngớ ngẩn đối với một đối tượng hoạt động như một chuỗi, nhưng nó minh họa điều gì sẽ xảy ra khi bạn so sánh hai đối tượng bằng cách sử dụng

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8. Toán tử
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
6 đưa ra phản hồi ngược lại của điều này trừ khi một phương thức lớp
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
49 cụ thể được triển khai

Ví dụ trên cũng cho bạn thấy rõ lý do tại sao nên sử dụng toán tử

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 của Python để so sánh với
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
7, thay vì toán tử
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8. Nó không chỉ nhanh hơn vì nó so sánh các địa chỉ bộ nhớ mà còn an toàn hơn vì nó không phụ thuộc vào logic của bất kỳ phương thức lớp
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
0 nào

Loại bỏ các quảng cáo

So sánh các toán tử so sánh Python

Theo quy tắc chung, bạn phải luôn sử dụng các toán tử đẳng thức

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
6, trừ khi bạn đang so sánh với
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
7

  • Sử dụng các toán tử Python

    >>> a = 256
    >>> b = 256
    >>> a is b
    True
    >>> id[a]
    1638894624
    >>> id[b]
    1638894624
    
    >>> a = 257
    >>> b = 257
    >>> a is b
    False
    
    >>> id[a]
    2570926051952
    >>> id[b]
    2570926051984
    
    8 và
    >>> from sys import intern
    >>> a = 'hello world'
    >>> b = 'hello world'
    >>> a is b
    False
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648426160
    
    >>> a = intern[a]
    >>> b = intern[b]
    >>> a is b
    True
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648396784
    
    6 để so sánh đẳng thức đối tượng. Ở đây, bạn thường so sánh giá trị của hai đối tượng. Đây là những gì bạn cần nếu bạn muốn so sánh xem hai đối tượng có cùng nội dung hay không và bạn không quan tâm đến nơi chúng được lưu trữ trong bộ nhớ

  • Sử dụng toán tử Python

    >>> a = 256
    >>> b = 256
    >>> a is b
    True
    >>> id[a]
    1638894624
    >>> id[b]
    1638894624
    
    >>> a = 257
    >>> b = 257
    >>> a is b
    False
    
    >>> id[a]
    2570926051952
    >>> id[b]
    2570926051984
    
    7 và
    >>> from sys import intern
    >>> a = 'hello world'
    >>> b = 'hello world'
    >>> a is b
    False
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648426160
    
    >>> a = intern[a]
    >>> b = intern[b]
    >>> a is b
    True
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648396784
    
    9 khi bạn muốn so sánh danh tính đối tượng. Ở đây, bạn đang so sánh xem hai biến có trỏ đến cùng một đối tượng trong bộ nhớ hay không. Trường hợp sử dụng chính cho các toán tử này là khi bạn đang so sánh với
    >>> from sys import intern
    >>> a = 'hello world'
    >>> b = 'hello world'
    >>> a is b
    False
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648426160
    
    >>> a = intern[a]
    >>> b = intern[b]
    >>> a is b
    True
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648396784
    
    7. Việc so sánh với
    >>> from sys import intern
    >>> a = 'hello world'
    >>> b = 'hello world'
    >>> a is b
    False
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648426160
    
    >>> a = intern[a]
    >>> b = intern[b]
    >>> a is b
    True
    >>> id[a]
    1603648396784
    >>> id[b]
    1603648396784
    
    7 theo địa chỉ bộ nhớ sẽ nhanh hơn và an toàn hơn so với việc sử dụng các phương thức lớp

Các biến có cùng giá trị thường được lưu trữ tại các địa chỉ bộ nhớ riêng biệt. Điều này có nghĩa là bạn nên sử dụng

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
6 để so sánh các giá trị của chúng và chỉ sử dụng toán tử
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
9 của Python khi bạn muốn kiểm tra xem hai biến có trỏ đến cùng một địa chỉ bộ nhớ hay không

Phần kết luận

Trong hướng dẫn này, bạn đã học được rằng

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
6 so sánh giá trị của hai đối tượng, trong khi toán tử
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 và
>>> from sys import intern
>>> a = 'hello world'
>>> b = 'hello world'
>>> a is b
False
>>> id[a]
1603648396784
>>> id[b]
1603648426160

>>> a = intern[a]
>>> b = intern[b]
>>> a is b
True
>>> id[a]
1603648396784
>>> id[b]
1603648396784
9 của Python so sánh xem hai biến có tham chiếu đến cùng một đối tượng trong bộ nhớ hay không. Nếu bạn ghi nhớ sự khác biệt này, thì bạn sẽ có thể ngăn chặn hành vi không mong muốn trong mã của mình

Nếu bạn muốn đọc thêm về thế giới tuyệt vời của việc thực tập đối tượng và toán tử

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 của Python, thì hãy xem Tại sao bạn gần như không bao giờ nên sử dụng “is” trong Python. Bạn cũng có thể xem cách bạn có thể sử dụng
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
7 để tối ưu hóa việc sử dụng bộ nhớ và thời gian so sánh cho các chuỗi, mặc dù rất có thể Python đã tự động xử lý việc này cho bạn ở hậu trường

Bây giờ bạn đã học được những gì các toán tử đẳng thức và danh tính thực hiện bên trong, bạn có thể thử viết các phương thức lớp

>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
0 của riêng mình, các phương thức này xác định cách so sánh các thể hiện của lớp này khi sử dụng toán tử
>>> a = 256
>>> b = 256
>>> a is b
True
>>> id[a]
1638894624
>>> id[b]
1638894624

>>> a = 257
>>> b = 257
>>> a is b
False

>>> id[a]
2570926051952
>>> id[b]
2570926051984
8. Đi và áp dụng kiến ​​thức mới của bạn về các toán tử so sánh Python này

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. So sánh các đối tượng Python đúng cách. "là" so với "=="

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Joska de Langen

Joska là một Ordina Pythoneer viết cho Real Python

» Thông tin thêm về Joska

Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Geir Arne

Jaya

Joanna

Mike

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

So sánh có nghĩa là gì trong Python?

Toán tử so sánh trong python, còn được gọi là toán tử quan hệ python, so sánh giá trị của hai toán hạng và trả về Đúng hoặc Sai dựa trên việc điều kiện có được đáp ứng hay không.

Hàm so sánh hoạt động như thế nào trong Python?

CMp[] là một phần của thư viện chuẩn python dùng để so sánh hai số nguyên. Kết quả so sánh là -1 nếu số thứ nhất nhỏ hơn số thứ hai và 1 nếu số thứ nhất lớn hơn số thứ hai. Nếu cả hai đều bằng nhau thì kết quả của cmp[] bằng 0 .

Có chức năng so sánh nào trong Python không?

Trong Python 2, __cmp__[self, other] đã triển khai so sánh giữa hai đối tượng, trả về giá trị âm nếu self < other , dương nếu .

Chủ Đề