Hướng dẫn how do you compare two methods in python? - làm thế nào để bạn so sánh hai phương pháp trong python?

Nếu bạn thực sự muốn biết liệu hai chức năng luôn luôn làm điều tương tự cho tất cả các đầu vào, bạn sẽ phải chạy cả hai trên tất cả các đầu vào (sẽ mất thời gian vô hạn) và cũng chặn tất cả các tác dụng phụ có thể có (điều này là không thể thực sự).

Show

Tất nhiên bạn có thể đưa ra một số heuristic, ném một tập hợp các giá trị khác nhau vào chúng, đối với khu vực ứng dụng của bạn, rất có khả năng tạo ra các đầu ra khác nhau nếu các chức năng khác nhau. Nhưng rõ ràng không có giải pháp mục đích chung nào cho điều đó, nếu không, tất cả các bài kiểm tra đơn vị sẽ được tạo tự động, tiết kiệm cho tất cả chúng ta rất nhiều công việc, phải không?


Ngược lại, bạn có thể chỉ muốn biết liệu hai chức năng có thực hiện chính xác hay không. Đối với điều đó, câu trả lời của Martijn Pieters là điểm khởi đầu rõ ràng, và thậm chí có thể là điểm kết thúc (tùy thuộc vào việc bạn quan tâm đến việc đóng cửa, toàn cầu, v.v.).


Nhưng những gì bạn yêu cầu là một cái gì đó khác với một trong hai; Bạn dường như muốn xem qua mã theo cách thủ công để xem "Cách thức hoạt động":

Một giải pháp khác sẽ là một số phương pháp tôi có thể chạy trên một hàm để xem những gì nó chứa hoặc cách thức hoạt động của nó. Vì vậy, một loại (lambda x: x). What () sẽ trả về cách phương thức hoạt động, có thể trong một từ điển hoặc một cái gì đó.

Chức năng đó đã tồn tại: dis.dis. Khi bạn chạy nó trên một chức năng, nó cho bạn biết chức năng đó hoạt động như thế nào. Không phải trong một từ điển (một từ điển về những gì?) Nhưng trong một chuỗi các dòng mã byte cho trình thông dịch Python (là một máy xếp tương đối đơn giản với một số thứ cấp cao hơn được thêm vào trên, chủ yếu được mô tả ngay trong tài liệu ____10) .

Hoặc, thậm chí đơn giản hơn, bạn có thể nhận được nguồn với

>>> 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
1.

Đây là những gì cả hai trông như thế nào với các ví dụ của bạn:

>>> f1 = lambda x: x
>>> f2 = lambda y: y
>>> def f3(z):
...     return z
>>> dis.dis(f1)
  1           0 LOAD_FAST                0 (x)
              3 RETURN_VALUE
>>> dis.dis(f2)
  1           0 LOAD_FAST                0 (y)
              3 RETURN_VALUE
>>> dis.dis(f3)
  1           0 LOAD_FAST                0 (z)
              3 RETURN_VALUE
>>> inspect.getsource(f1)
'f1 = lambda x: x\n'
>>> inspect.getsource(f2)
'f2 = lambda y: y\n'
>>> inspect.getsource(f3)
'def f3(z):\n    return z\n'

Trong trường hợp đầu tiên, bạn cần biết đủ về

>>> 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
0 để nhận ra rằ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
3, v.v., không phải là một phần của mã byte, mà là một phần của danh sách tên địa phương của hàm. . Vì vậy, dù sao đi nữa, không có cách nào để tự động hóa điều này (hoặc, thực sự, bất cứ điều gì ngoài câu trả lời của Martijn).

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: So sánh các đối tượng Python đúng cách: "là" vs "==" This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Comparing Python Objects the Right Way: "is" vs "=="

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

>>> 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
8) và toán tử bình đẳ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
9). Mã của bạn có thể chạy tốt khi bạn sử dụng toán tử Python
>>> 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
8 để so sánh các số, cho đến khi nó đột nhiên không. Bạn có thể đã nghe thấy ở đâu đó rằng nhà điều hành Python
>>> 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
8 nhanh hơn nhà điều hành
>>> 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
9 hoặc bạn có thể cảm thấy rằng nó trông giống Pythonic hơn. Tuy nhiên, nó rất quan trọng để ghi nhớ rằng các nhà khai thác này không hoạt động khá giống nhau.

Toán tử

>>> 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
9 so sánh giá trị hoặc bình đẳng của hai đối tượng, trong khi toán tử Python
>>> 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
8 kiểm tra xem hai biến có hướng đế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ử bình đẳ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
9 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, ngoại trừ khi bạn 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.equality of two objects, whereas the Python
>>> 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
8 operator checks whether two variables point to the same object in memory. In the vast majority of cases, this means you should use the equality operators
>>> 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
9 and
>>> 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, except when you’re comparing to
>>> 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 là gì giữa bình đẳng đối tượng và bản sắcobject equality and identity
  • Khi nào nên sử dụng các toán tử bình đẳng và nhận dạng để so sánh các đối tượngcompare objects
  • Những người điều khiển python này làm gì dưới mui xePython operators do under the hood
  • Tại sao sử dụ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
    
    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
    
    9 để so sánh các giá trị dẫn đến hành vi bất ngờunexpected behavior
  • Cách viết phương thức lớp tùy chỉ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
    
    0 để xác định hành vi của người vận hành bình đẳngcustom
    >>> 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 class method
    to define equality operator behavior

So sánh danh tính với Python IS và không phải là người vận hành

Các toán tử Python

>>> 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
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
9 so sánh danh tính của hai đối tượng. Trong Cpython, đây là địa chỉ bộ nhớ của họ. Tất cả 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
>>> 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
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
9 kiểm tra xem hai biến có đề cập đến cùng một đối tượng trong bộ nhớ hay không.identity of two objects. In CPython, this is their memory address. Everything in Python is an object, and each object is stored at a specific memory location. The Python
>>> 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
8 and
>>> 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 operators check whether two variables refer to the same object in memory.

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

>>> 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 trong đó các đối tượng có cùng giá trị sẽ có cùng một 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í số ít và cố định trong bộ nhớ, lưu bộ nhớ cho các số nguyên thường được sử dụng.interned in CPython. Each number is stored at a singular and fixed place in memory, which saves memory for commonly-used integers.

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 tập để thực hiện. Chức năng này cho phép bạn so sánh các địa chỉ bộ nhớ của chúng thay vì so sánh các đặc điểm của các 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

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

>>> 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 trong đó các đối tượng có cùng giá trị sẽ có cùng một 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í số ít và cố định trong bộ nhớ, lưu bộ nhớ cho các số nguyên thường được sử dụng.This means you should not use the Python

>>> 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
8 operator to compare values.

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 tập để thực hiện. Chức năng này cho phép bạn so sánh các địa chỉ bộ nhớ của chúng thay vì so sánh các đặc điểm của các chuỗi:

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 chỉ ra hai đối tượng khác nhau trong bộ nhớ, như được hiển thị bởi 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ị
>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520
2 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 đảm bảo rằng nó chỉ vào cùng một địa chỉ bộ nhớ với
>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520
2 đầu tiên mà bạn đã thực tậ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

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

>>> 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ữ.common integers (ranging from -5 to 256), they’re stored at separate memory addresses.

Có một số trường hợp phổ biến trong đó các đối tượng có cùng giá trị sẽ có cùng một 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í số ít và cố định trong bộ nhớ, lưu 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 tập để thực hiện. Chức năng này cho phép bạn so sánh các địa chỉ bộ nhớ của chúng thay vì so sánh các đặc điểm của các chuỗi:

>>>

>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520

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

>>> 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 trong đó các đối tượng có cùng giá trị sẽ có cùng một 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í số ít và cố định trong bộ nhớ, lưu bộ nhớ cho các số nguyên thường được sử dụng.

>>>

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False
>>> id(a)
2356388925576
>>> id(b)
2356388952648

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

>>> 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 trong đó các đối tượng có cùng giá trị sẽ có cùng một 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í số ít và cố định trong bộ nhớ, lưu 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 tập để thực hiện. Chức năng này cho phép bạn so sánh các địa chỉ bộ nhớ của chúng thay vì so sánh các đặc điểm của các chuỗi:same value are often stored at separate memory addresses. Use the equality operators
>>> 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
9 and
>>> 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 if you want to check whether or not two objects have the same value, regardless of where they’re stored in memory. In the vast majority of cases, this is what you want to do.

Khi bản sao đối tượng bằng nhau nhưng không giống nhau

Trong ví dụ dưới đây, 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 thành 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à một đố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ữ tại một địa chỉ bộ nhớ khác nhau:

>>>

>>> a = [1, 2, 3]
>>> b = a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a == b
True
>>> a is b
False

>>> id(a)
2570926058312
>>> id(b)
2570926057736

>>> 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 = [1, 2, 3]
>>> b = a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a == b
True
>>> a is b
False

>>> id(a)
2570926058312
>>> id(b)
2570926057736
4 sẽ không còn trả về
>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520
5. Tuy nhiên,
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a == b
True
>>> a is b
False

>>> id(a)
2570926058312
>>> id(b)
2570926057736
6 trả về
>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520
5 vì cả hai đối tượng đều có cùng giá trị.

Cách so sánh bằng cách bình đẳng hoạt động

Sự kỳ diệu của toán tử bình đẳ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
9 xảy ra trong phương pháp 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 của dấu hiệu
>>> 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
9.

Đây là một phương pháp lớp ma thuật mà Lát gọi là 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 thức này không được thực hiện, thì

>>> 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
9 sẽ so sánh các địa chỉ bộ nhớ của hai đối tượng theo mặc định.

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

class SillyString(str):
    # This method gets called when using == on the object
    def __eq__(self, other):
        print(f'comparing {self} to {other}')
        # Return True if self and other have the same length
        return len(self) == len(other)    
2 kế thừa từ
class SillyString(str):
    # This method gets called when using == on the object
    def __eq__(self, other):
        print(f'comparing {self} to {other}')
        # Return True if self and other have the same length
        return len(self) == len(other)    
3 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 khác hay không:

class SillyString(str):
    # This method gets called when using == on the object
    def __eq__(self, other):
        print(f'comparing {self} to {other}')
        # Return True if self and other have the same length
        return len(self) == len(other)    

Bây giờ, một sillystring

>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520
2 phải bằng với chuỗi
class SillyString(str):
    # This method gets called when using == on the object
    def __eq__(self, other):
        print(f'comparing {self} to {other}')
        # Return True if self and other have the same length
        return len(self) == len(other)    
6 và thậm chí với bất kỳ đối tượng nào khác có cùng độ dài:

>>>

>>> # Compare two strings
>>> 'hello world' == 'world hello'
False

>>> # Compare a string with a SillyString
>>> 'hello world' == SillyString('world hello')
comparing world hello to hello world
True

>>> # Compare a SillyString with a list
>>> SillyString('hello world') == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
comparing hello world to [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
True

>>> 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 = [1, 2, 3]
>>> b = a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a == b
True
>>> a is b
False

>>> id(a)
2570926058312
>>> id(b)
2570926057736
4 sẽ không còn trả về
>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520
5. Tuy nhiên,
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a == b
True
>>> a is b
False

>>> id(a)
2570926058312
>>> id(b)
2570926057736
6 trả về
>>> a = [1, 2, 3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]

>>> id(a)
2570926056520
>>> id(b)
2570926056520
5 vì cả hai đối tượng đều có cùng giá trị.

Cách so sánh bằng cách bình đẳng hoạt động

Sự kỳ diệu của toán tử bình đẳ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 9 xảy ra trong phương pháp 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 của dấu hiệu >>> 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 9.

Đây là một phương pháp lớp ma thuật mà Lát gọi là 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 thức này không được thực hiện, thì

>>> 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
9 sẽ so sánh các địa chỉ bộ nhớ của hai đối tượng theo mặc định.

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

    class SillyString(str):
        # This method gets called when using == on the object
        def __eq__(self, other):
            print(f'comparing {self} to {other}')
            # Return True if self and other have the same length
            return len(self) == len(other)    
    
    2 kế thừa từ
    class SillyString(str):
        # This method gets called when using == on the object
        def __eq__(self, other):
            print(f'comparing {self} to {other}')
            # Return True if self and other have the same length
            return len(self) == len(other)    
    
    3 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 khác hay không:
    . Here, you’re generally comparing the value of two objects. This is what you need if you want to compare whether or not two objects have the same contents, and you don’t care about where they’re stored in memory.

  • Bây giờ, một sillystring

    >>> a = [1, 2, 3]
    >>> b = a
    >>> a
    [1, 2, 3]
    >>> b
    [1, 2, 3]
    
    >>> a.append(4)
    >>> a
    [1, 2, 3, 4]
    >>> b
    [1, 2, 3, 4]
    
    >>> id(a)
    2570926056520
    >>> id(b)
    2570926056520
    
    2 phải bằng với chuỗi
    class SillyString(str):
        # This method gets called when using == on the object
        def __eq__(self, other):
            print(f'comparing {self} to {other}')
            # Return True if self and other have the same length
            return len(self) == len(other)    
    
    6 và thậm chí với bất kỳ đối tượng nào khác có cùng độ dài:
    . Here, you’re comparing whether or not two variables point to the same object in memory. The main use case for these operators is when you’re comparing to
    >>> 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. It’s faster and safer to compare to
    >>> 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 by memory address than it is by using class methods.

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 những gì xảy ra khi bạn so sánh hai đối tượng sử dụ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
9. 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 nghịch đảo của điều này trừ khi phương pháp lớp
class SillyString(str):
    # This method gets called when using == on the object
    def __eq__(self, other):
        print(f'comparing {self} to {other}')
        # Return True if self and other have the same length
        return len(self) == len(other)    
9 cụ thể được thực hiện.

Ví dụ trên cũng cho bạn thấy rõ lý do tại sao việc sử dụng toán tử Python >>> 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 8 là tốt để 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ử >>> 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 9. 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 pháp 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.

So sánh các toán tử so sánh Pythoncompare the value of two objects, whereas the Python

>>> 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
8 and
>>> 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 operators compare whether two variables refer to the same object in memory. If you keep this distinction in mind, then you should be able to prevent unexpected behavior in your code.

Theo nguyên tắc thông thường, bạn nên luôn luôn sử dụng các toán tử bình đẳ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
9 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, ngoại trừ khi bạn 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:object interning and the Python
>>> 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
8 operator, then check out Why you should almost never use “is” in Python. You could also have a look at how you can use
>>> 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 to optimize memory usage and comparison times for strings, although the chances are that Python already automatically handles this for you behind-the-scenes.

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

>>> 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
9 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 bình đẳng đố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 việc hai đối tượng có cùng nội dung hay không, và bạn không quan tâm đến nơi họ lưu trữ trong bộ nhớ.equality and identity operators do under the hood, you can try writing your own
>>> 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 class methods, which define how instances of this class are compared when using the
>>> 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
9 operator. Go and apply your newfound knowledge of these Python comparison operators!

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

>>> 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
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
9 khi bạn muốn so sánh nhận dạng đối tượng. Ở đây, bạn có thể so sánh việc hai biến có chỉ vào 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 nhà khai thác này là khi bạn 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. Nó nhanh hơn và an toàn hơn để 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ớ so với sử dụng các phương thức lớp. This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Comparing Python Objects the Right Way: "is" vs "=="

Python có phương pháp so sánh không?

Phương thức Python - CMP () CMP () là một phần của thư viện tiêu chuẩn Python so sánh hai số nguyên. Kết quả so sánh là -1 nếu số nguyên đầu tiên nhỏ hơn thứ hai và 1 nếu số nguyên thứ nhất lớn hơn so với thứ hai. Nếu cả hai đều bằng kết quả của CMP () bằng không.The cmp() is part of the python standard library which compares two integers. The result of comparison is -1 if the first integer is smaller than second and 1 if the first integer is greater than the second. If both are equal the result of cmp() is zero.

== So sánh trong Python là gì?

Toán tử == so sánh giá trị hoặc bình đẳng của hai đối tượng, trong khi đó, toán tử là toán tử kiểm tra xem hai biến có hướng đế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ử bình đẳng == và! =, Ngoại trừ khi bạn so sánh với không có ai.compares the value or equality of two objects, whereas the Python is operator checks whether two variables point to the same object in memory. In the vast majority of cases, this means you should use the equality operators == and != , except when you're comparing to None .

Là == một toán tử so sánh trong Python?

Nó hoặc trả về đúng hoặc sai theo điều kiện.Các nhà khai thác này còn được gọi là toán tử so sánh.... Các nhà khai thác quan hệ trong Python ..

Làm thế nào để Python so sánh hai lớp?

Khi so sánh hai đối tượng của một lớp tùy chỉnh bằng cách sử dụng ==, python theo mặc định chỉ so sánh các tham chiếu đối tượng, không phải dữ liệu có trong các đối tượng.Để ghi đè hành vi này, lớp có thể thực hiện phương thức __eq __ () đặc biệt, chấp nhận hai đối số - các đối tượng được so sánh - và trả về đúng hoặc sai.using == , Python by default compares just the object references, not the data contained in the objects. To override this behavior, the class can implement the special __eq__() method, which accepts two arguments — the objects to be compared — and returns True or False .