Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

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 để thực hiện các 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 hiện 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à các chuỗi đơn giản. 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) để tiết kiệm bộ nhớ. Đ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) để làm cho một biến bằng nhau, 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à, trong 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 tài liệu 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 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

Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

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

Giới thiệu về Joska de Langen

Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python
Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

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à

Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

Geir Arne

Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

Jaya

Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

Joanna

Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

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

Đặt tên cho chức năng cần thiết để so sánh hai loại và cũng minh họa ví dụ trong python

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. Nhận các mẹo để đặt câu hỏi hay 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

Chức năng Python so sánh các mục của hai là gì?

Phương thức sort() của Python và toán tử == để so sánh các danh sách . Phương thức sort() trong Python được sử dụng để sắp xếp danh sách đầu vào với mục đích nếu hai danh sách đầu vào bằng nhau thì các phần tử sẽ nằm ở cùng vị trí chỉ mục

Hai loại hàm trong Python là gì?

Về cơ bản, có hai loại chức năng. .
Các chức năng do người dùng xác định – Các chức năng này được người dùng xác định để thực hiện một tác vụ cụ thể
Các hàm tích hợp – Các hàm này là các hàm được xác định trước trong Python

Các loại chức năng khác nhau trong Python giải thích chúng bằng một ví dụ là gì?

Có 2 loại hàm trong python. Hàm do người dùng xác định - những loại hàm này do người dùng xác định để thực hiện bất kỳ tác vụ cụ thể nào. Hàm tích hợp - các loại hàm này được xác định trước trong python.

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

có sẵn trong Python 2. 7, Trăn 3. 2 trở lên . Theo tài liệu Python 3, “hàm so sánh là bất kỳ hàm có thể gọi nào chấp nhận hai đối số, so sánh chúng và trả về một số âm cho giá trị nhỏ hơn, 0 cho giá trị bằng hoặc số dương cho giá trị lớn hơn.